Linux网络编程中 发送的消息无法正常显示
问题描述如题
截图如下:
服务端能正常显示
客户端接收到的服务端的消息无法正常显示:
这是服务端本来需要发送的消息:
------解决方案--------------------
遇到问题应该第一时间怀疑自己的代码,难道你觉得的是系统的bug被你发现了? wireshark抓包分析其中的数据是不是正确的,如果是正确的,那么说明是你客户端的问题。如果数据不正确就是服务器的问题。
------解决方案--------------------代码不打出来了吗
memset(buf,0x00, sizeof(buf);
这样buf所占大小的内存区域都会是0了, 发送不超过buf大小的内容就好了
------解决方案--------------------
这个代码我和很多同学测试了一下。服务器运行后,客户端本地连接没问题。但是服务器发送的数据无法回送到客户端。调适了一下,服务端与客户端连接上了,服务端数据也发出去了,但是客户端就是没有收到。代码也没有找出问题。客户端收到的数据Num=0.用数组接受每一位也都是0。
您提到的 memset(); 也使用了。但是因为用的vi编辑器,没办法调适问题的原因。。
------解决方案--------------------wireshark就是个抓包工具,用法很简单呀
用wireshark或者tcpdump也可以知道服务器根本就没发出去过
同时还可以检查下send的返回值
if(send(xxxxxxxxx) < 0) {
perror("send error);
exit(1);
}
这样就会提示:send error: Socket operation on non-socket
------解决方案--------------------send(connectfd,"1111",8,0);
换成send(connectfd,"1111",strlen("1111"),0);
------解决方案--------------------
再回答一遍:
if(connectfd = accept(listenfd,(struct sockaddr*)&client,&addrlen)==-1)
改为:
if( (connectfd = accept(listenfd, (struct sockaddr*)&client, &addrlen)) == -1)
注意== 与 = 的优先级!这是根本原因,这样就一定能显示出来了。
楼上所说的也是buf长度的问题,是程序编码中的要求,因为你访问了自己声明的空间。
------解决方案--------------------我以前也出现过这个问题,然后我把接受缓存先清空在接受。 就可以了 不知道你是不是这个问题。 没看代码。