gpt4 book ai didi

c - 数据未正确发送/接收

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

我正在尝试使用 c 中的套接字实现 TCP 服务器/客户端。我以这样的方式编写程序,即我们在客户端发送的任何内容都逐行显示在服务器中,直到键入退出。该程序可以运行,但数据最后一起显示在服务器中。有人可以检查代码吗?

TCP 服务器

#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
char buf[100];
socklen_t len;
int k,sock_desc,temp_sock_desc;
struct sockaddr_in client,server;

memset(&client,0,sizeof(client));
memset(&server,0,sizeof(server));
sock_desc = socket(AF_INET,SOCK_STREAM,0);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = 7777;

k = bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
k = listen(sock_desc,20);
len = sizeof(client);
temp_sock_desc = accept(sock_desc,(struct sockaddr*)&client,&len);

while(1)
{
k = recv(temp_sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;

if(k>0)
printf("%s",buf);
}

close(sock_desc);
close(temp_sock_desc);
return 0;
}

TCP 客户端

#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
char buf[100];
struct sockaddr_in client;
int sock_desc,k;

sock_desc = socket(AF_INET,SOCK_STREAM,0);
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr("127.0.0.1");
client.sin_port = 7777;

k = connect(sock_desc,(struct sockaddr*)&client,sizeof(client));

while(1)
{
gets(buf);
k = send(sock_desc,buf,100,0);

if(strcmp(buf,"exit")==0)
break;
}

close(sock_desc);
return 0;
}

最佳答案

while(1){
k = recv(temp_sock_desc,buf,100,0);
if(memcmp(buf,"exit", 4)==0)
break;
if(k>0)
printf("%*.*s", k, k, buf);
}

recv() 的结果不是字符串,因此不会以 nul 结尾。上面的“修复”并不完全正确,只是为了给你指出正确的方向。

关于c - 数据未正确发送/接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633520/

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