knrt.net
当前位置:首页 >> 我在linux环境下编写uDp客户端程序。为什么使用sEnDto发送数据时,接收端接收不到数据。 >>

我在linux环境下编写uDp客户端程序。为什么使用sEnDto发送数据时,接收端接收不到数据。

1、检查客户端和服务端的端口号是否一致;2、接收端的socket要采用block模式,数据收到后打印出来.

估计你是用的tcp socket,导致“videlord”网友说的情况:对于tcp socket,send与recv不是对等的,recv时只要缓冲有数据就会收上来.简单说就是你send 4次,比如分别为10 10 10 10字节,对端可以一次recv到这40字节数据,也可以recv 40次、每次1字节.解决办法有两种:1. 改用udp socket,send/recv自然对等了2. 继续用tcp socket,自己进行数据分段:比如自行约定在数据前约定4个字节用于描述数据长度,这样发送时,send 4+33字节,send 4+35字节;接收时,先获取描述长度的4字节获得长度,再按照长度接收数据(可能需要多次recv凑齐指定长度).

检查,接收socket有没有绑定端口,绑定的哪个端口,这个端口,是不是客户端发送指定的端口相同. 其次,检查发送的socket所发送到的地址是不是正确的,端口是不是正确. 再次次,sendto是UDP的发送接口,UDP不提供有保证的服务(与TCP的不同).所以,在中国络状况差的环境下,UDP很有可能会丢包. 如果楼主要传输文件之类的数据,建议使用TCP,因为文件需要保证完整性,UDP可能会丢包.保证不了. 当然,你也可以添加RTP协议辅助UDP来保证传输

第1种可能:连接未成功.先检查连接是否可用.端口是否正确第2种可能:连接刚成功,你不小心在哪关闭或重置了.第3种可能:发数据时,出现了粘包的问题.这个问题最麻烦,必须制定自己的数据包协议.算法很多,但需要服务和客户端都遵循.如果不是TCP/IP,应该不会有粘包的可能.第4种可能:数据发送了,但在内存内,并没有送达到指定的流内.强制flush就可以

希望能够多贴一些代码出来,帮助分析.1.检查一下sendto的参数,其中的指针参数是否初始化正确?2.请检查一下recvfrom的函数声明,第6个参数的原型.

说明:把广播地址改为服务器地址时接收正常 ?如果接收正常就OK了?你发送到广播地址,接收到的是服务器发出的.发送 -> to 255.255.255.255 接受 -> bind 0.0.0.0 -> from server_addr 要不然就是你没有说清楚 --------------------------- 你希望服务器收到自己的广播?那个不是保证可以正确的.不一定会收到几个,也可能没有.

在VB中利用UDP协议编写聊天程序 UDP 协议是一种无连接协议,两台计算机之间的数据传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接. 由于UDP 协议不需要显式的连接,就需要在两个Winsock

有一种可能是,你发的前8包把接收端的socket缓存占完了,后面到来的包放不下全被丢弃了.建议的调试方法:1.增加接收端的套接字的buffer缓存.2.发送端每次发的包小一点.3.发送端sleep时间长一点,比如1秒.

一般情况下:send(),recv()用于TCP,sen一般情况下:send(),recv()用于TCP,sendto()及recvfrom()用于UDP 但是send(),recv()也可以用于UDP,sendto()及recvfrom()也可以用于TCP send函数 int send( SOCKET s, const char FAR *buf

应该不是吧.

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.knrt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com