[英]Data not send/received properly
我正在尝试使用c中的套接字来实现TCP服务器/客户端。 我编写程序的方式是,我们在客户端中发送的所有内容都会在服务器中逐行显示,直到键入exit。 该程序可以运行,但最后将数据一起显示在服务器中。 有人可以检查代码吗?
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结尾。 上面的“修复”并不完全正确,仅是为您指出正确的方向。
gets()将终止换行符替换为'\\ 0'。 结果字符串发送到服务器,服务器将其写入标准输出。 Stdout已缓冲,因此在程序终止或打印'\\ n'之前,屏幕上不会显示任何内容。
在您的printf中添加“ \\ n”:
if(k>0)
printf("%s\n",buf);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.