日期:2014-05-16  浏览次数:20590 次

Linux网络编程中 发送的消息无法正常显示
问题描述如题


截图如下:

服务端能正常显示


客户端接收到的服务端的消息无法正常显示:


这是服务端本来需要发送的消息:

------解决方案--------------------
引用:
引用:wireshark抓包,看里面的数据,OK?
这么简单的程序,帖代码。


代码应该是没有问题的,  服务端能接收到客户端的连接,并且 客户端也收到了服务端发送的消息,  但是在客户端显示的时候为什么  显示方框?


遇到问题应该第一时间怀疑自己的代码,难道你觉得的是系统的bug被你发现了? wireshark抓包分析其中的数据是不是正确的,如果是正确的,那么说明是你客户端的问题。如果数据不正确就是服务器的问题。
------解决方案--------------------
代码不打出来了吗
memset(buf,0x00, sizeof(buf);
这样buf所占大小的内存区域都会是0了, 发送不超过buf大小的内容就好了
------解决方案--------------------
引用:
引用:
引用:代码不打出来了吗
memset(buf,0x00, sizeof(buf);
这样buf所占大小的内存区域都会是0了, 发送不超过buf大小的内容就好了

我实在是很菜鸟啊,大神,请在说详细点可否?   直接说把哪里改成哪里的怎么样?
服务器端


C/C++ code??



123
……


这个代码我和很多同学测试了一下。服务器运行后,客户端本地连接没问题。但是服务器发送的数据无法回送到客户端。调适了一下,服务端与客户端连接上了,服务端数据也发出去了,但是客户端就是没有收到。代码也没有找出问题。客户端收到的数据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长度的问题,是程序编码中的要求,因为你访问了自己声明的空间。
------解决方案--------------------
我以前也出现过这个问题,然后我把接受缓存先清空在接受。 就可以了 不知道你是不是这个问题。 没看代码。