gpt4 book ai didi

c - 通过send() recv()发送多条消息,Socket编程,C

转载 作者:太空狗 更新时间:2023-10-29 15:01:25 25 4
gpt4 key购买 nike

我正在尝试制作一个程序(客户端),它可以根据用户的请求向服务器发送消息。精简代码如下:

客户:

int main(int argc, char **argv) {

struct sockaddr_in servaddr;
int sock = socket(AF_INET, SOCK_STREAM, 0);

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(6789);
servaddr.sin_addr.s_addr = inet_addr(<ip_address_of_server>);

while(1) {

char message[161];
fgets(message, 161, stdin);

/* Replacing '\n' with '\0' */
char *tmp = strchr(message, '\n');
if (tmp) *tmp = '\0';

connect(sock, (struct sockaddr *)&servaddr, sizeof(servaddr));
send(sock, message, strlen(message), 0);
close(sock);
}
}

服务器:

int main(int argc, char **argv) {

struct sockaddr_in servaddr;
int sock = socket(AF_INET, SOCK_STREAM, 0);

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(6789);

bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(sock, 5);

while(1) {
int clisock = accept(sock, (struct sockaddr *) NULL, NULL);

if (clisock >= 0) {
int messageLength = 160;
char message[messageLength+1];
int in, index = 0, limit = messageLength;

while ((in = recv(clisock, &message[index], messageLength, 0)) > 0) {
index += in;
limit -= in;
}

printf("%s\n", message);
}

close(clisock);
}
}

现在,这适用于我发送的第一条消息。但是它无法建立另一个连接(我在客户端程序中尝试连接时收到错误消息“错误的文件描述符”。)任何人都可以看到我误解了什么吗?谢谢:)

最佳答案

你的客户端程序也犯了同样的错误,第一次打开套接字但在第一次连接完成后你关闭了套接字,所以下一次在循环中套接字描述符无效,你需要重新打开套接字但缺少,请从顶部删除套接字调用并在 while 循环的开头添加以下行

int sock = socket(AF_INET, SOCK_STREAM, 0);

关于c - 通过send() recv()发送多条消息,Socket编程,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172538/

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