gpt4 book ai didi

c++ - 调用recv()会导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:00 35 4
gpt4 key购买 nike

我正在我的 Linux 机器上使用 TCP 连接制作一个聊天程序。我有一个工作程序可以将文本发送到服务器并接收返回的数据,但是当我将完全相同的行与recv()一起使用时,我遇到了段错误。代码是这样的:

#include <stdio.h>
#include <string.h> // for strlen()
#include <stdlib.h> // for exit()
#include <sys/socket.h> // for send() and recv()
#include <unistd.h> // for sleep(), close()
#include <iostream>

#include "Auxiliary.h"
#include "CreateTCPClientSocket.h"

#define RCVBUFSIZE 32 /* Size of receive buffer */

int main (int argc, char *argv[])
{
int sock; /* Socket descriptor */
char * echoString; /* String to send to echo server */
char * tempString; /* String to save the cin */
char echoBuffer[RCVBUFSIZE + 1]; /* Buffer for received string */
int echoStringLen; /* Length of string to echo */
int bytesRcvd; /* Bytes read in single recv() */

bool end = false;

parse_args (argc, argv);

sock = CreateTCPClientSocket (argv_ip, argv_port);

while (!end)
{
bool messageGet = false;
std::cout << "What's your message:" << std::endl;
while(!messageGet)
{
std::cin >> tempString;
if(tempString != "")
{
echoString = tempString;
messageGet = true;
}
}

echoStringLen = strlen(echoString); /* Determine input length */
echoString[echoStringLen] = '\0';
echoStringLen += 2;
delaying();

send(sock, echoString, echoStringLen, 0);

info_s("Sent string:", echoString);

// TODO: add code to receive & display the converted string from the server
// use recv()
bytesRcvd = recv(sock, echoBuffer, RCVBUFSIZE-1, 0);
std::cout << echoBuffer << std::endl;
}

delaying ();

close (sock);
info ("close & exit");
exit (0);
}

最佳答案

您有多确定段错误出现在 recv() 中?

您对 recv() 的调用看起来不错,但是,前面的一行正在写入未分配的内存,这将导致段错误:

std::cin >> tempString;

尝试像这样声明 tempString:

#define INPUT_BUF_SIZE 100
char tempString[INPUT_BUF_SIZE + 1];

此外,这段代码看起来很不寻常:

echoStringLen = strlen(echoString);          /* Determine input length */
echoString[echoStringLen] = '\0';
echoStringLen += 2;

echoString 已经以 null 终止,否则 strlen() 将不会返回正确的结果。由于它已经以 null 终止,因此添加 \0 不会产生任何效果,并且将长度增加 2 是错误的。您可以将这三行替换为:

echoStringLen = strlen(echoString);

关于c++ - 调用recv()会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27037465/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com