gpt4 book ai didi

不能一个接一个地建立一个tcp连接

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:27 25 4
gpt4 key购买 nike

我对套接字编程还很陌生。我看到了一个教程并尝试在我的 Linux 机器上实现这些程序。代码是:

客户:

int main() {

char buf[256] = "In client";


// create the socket
int sock;
sock = socket(AF_INET, SOCK_STREAM, 0);

//setup an address
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(9002);

int status = connect(sock, (struct sockaddr *) &server_address, sizeof(server_address));
if(status == -1)
{

printf("There Was an error!");
}

recv(sock, buf, sizeof(buf), 0);

printf("\n %s \n", buf);
close(sock);

return 0;
}

服务器:

int main() {

char server_message[256] = "You have reached the server!";

// create the server socket
int server_socket;
server_socket = socket(AF_INET, SOCK_STREAM, 0);


// define the server address
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;

// bind the socket to our specified IP and port
bind(server_socket, (struct sockaddr*) &server_address, sizeof(server_address));

listen(server_socket, 5);

int client_socket;
client_socket = accept(server_socket, NULL, NULL);

// send the message
send(client_socket, server_message, sizeof(server_message), 0);

// close the socket
close(server_socket);

return 0;
}

代码是不言自明的。当我第一次运行服务器然后运行客户端时,它可以正常工作。但是当我再次执行此操作时,就在上一个之后,客户端给出了消息 - There Was an error!,这意味着连接没有发生。

任何人都可以帮助为什么会发生这种情况?提前致谢!

最佳答案

您应该检查服务器中所有系统调用的错误。我猜您的 bind 失败了,因为该端口“已在使用中”。原因是来自服务器先前实例的连接在操作系统的连接表中存在一段时间。

您想将 setsockoptSO_REUSEADDR 一起使用以避免 bind 失败。具体来说,将其添加到 bind 调用之前。

int reuse = 1;
if (setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuse, sizeof(reuse)) < 0)
perror("setsockopt(SO_REUSEADDR) failed");

(并检查错误。如果你知道什么时候失败,调试这些事情会容易得多。另外,使用 perrorstrerror(errno) 为了找出失败的确切原因——而不仅仅是失败的。)

关于不能一个接一个地建立一个tcp连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45824594/

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