‘壹’ android与我的电脑进行socket通信时出现异常java.net.SocketException: Connection reset
这是因为你的8888端口被使用了。
或者说被之前的服务器占用没有关闭。
你可以修改一下8889试试
‘贰’ socket丢包怎么解决
服务器给客户端发大量数据,Send的频率很高,那么就有可能在Send时发生错误(原因可能是又多种,可能是程序处理逻辑问题,多线程同步问题,缓冲区溢出问题等等),如果没有对Send失败做处理重发数据,那么客户端收到的数据就会比理论应该收到的少,就会造成丢数据,丢包的现象。
这种现象,其实本质上来说不是丢包,也不是丢数据,只是因为程序处理有错误,导致有些数据没有成功地被socket发送出去。
常用的解决方法如下:拆包、加包头、发送,组合包,如果客户端、服务端掉线,常采用心跳测试。
‘叁’ TCP 协议下 socket 有可能丢包吗
socket分为TCP协议和UDP协议传输不知道你用的是哪种! TCP协议,是面向连接的协议,是不会丢包的,再连接不好的情况下,你发不出去数据的。 UDP协议,是面向无连接的协议,也就是不关网络的情况怎样,包发了出去就不管了,所以网络不好的情况下发出去的数据包就都丢失了。
‘肆’ java socket局域网传输文件丢包严重
UDP协议,回出现丢包。
TCP协议,不会出现丢包。
java socket局域网传输文件的底层是属于TCP协议,TCP理论上不用出现丢包的现象,所以,可以判断是程序逻辑有问题,请检测程序上否有逻辑错误。
‘伍’ socket 编程频繁使用 send 函数为什么会出现丢包的现象
send这个函数有一个特性,就是函数调用的时候并不是真正发送数据的时候。send的作用其实是将指定的数据先复制到系统的一个缓冲区中,然后等待系统发出。所以,send的返回值就是实际复制到缓冲区中数据的长度。如果频繁的调用,可能往缓冲区中写入的数据很多,最后可能已经写不进去了。比如,IBM z/TPF的缓存大小是1M [4],其他系统没查到。所以你要检查一下send函数的返回值,看看是不是跟你传进去的length的长度一致。如果不一致,那就是没有拷贝进入发送的缓冲区,所以没有发出去。
另外,不知道你是怎么检测到的丢包现象。如果你不是用的Wireshark之类的嗅探器进行数据包的截获和查看,那么还有一个可能,就是数据实际上已经发出去了,但是因为数据量比较大,一次没有办法收回来,所以你以为是丢包了。
‘陆’ android socket 问题。。。。。
输出到result2
说明“socket.receive(packet);”这句有问题啊,检查下socket 啊!
我还没学android的东西,就是靠java知识联想的,希望对你有帮助。
以前在java中用socket的时候也经常出现类似的错误,多调试多测试,加油啊
你可以debug一下试试啊,看看是哪里的问题
‘柒’ socket编程中的接收数据丢失问题
TCP协议通信,接收方接收数据的前后次序与发送方一致,但数据包不一定一致。打个比方,发送方按顺序发送了2个数据包,接收可能仅接收1次就能全部收到,也可能需要收2次才能收到,也可能收3次,每次收到的数据大小不一定和发送方发送的数据包大小一样,但最终收到的总数据是一致的。
从你的程序来看,客户端连续发送2包数据,服务器端有可能一次就全部接到,也可能分2次收到,也可能会收2次以上才能收到。如果在发送“########helloworld”和“######whatisit”之间增加一些延时语句,比如延时1秒,那么可以肯定服务器端只能收到1次,因为在发送第1包数据的时候,服务器端就接收到一次数据,而在发送第2包数据时,服务器已经不再有接收动作了。
就现在的客户端程序来说,如果要在服务器端收到所有数据,可以考虑在服务器端循环接收数据,拼装数据,直到收不到数据为止,然后输出所有接收到的数据。
while(1)
{
int rr;
sock_fd = accept( sock, NULL, NULL);
retval = 0;
while(1)
{
rr = recv( sock_fd, buf1, MAX_BUFLEN, 0 );
if(rr==0) break;
memcpy(buf+retval,buf1,rr);
retval+=rr;
}
printf("buf= %s\n ##retval=%d\n",buf,retval);
write(sock_fd,"get the call\n",sizeof("get the call\n")-1);
}
可以试试看。仅供参考。
查到个函数ioctlsocket
while(1)
{ int rr;
sock_fd = accept( sock, NULL, NULL);
retval = 0;
int iMode = 1; //0:阻塞
ioctlsocket(sock_fd,FIONBIO, (u_long FAR*) &iMode);//非阻塞设置
while(1) { ....... }
........
}
‘捌’ C#socket异步通信丢包现象求解答,该怎么处理
可以用ping命令测试一下丢包率,如果ping命令执行期间没有丢包,说明你的代码有问题,如果ping命令都丢包,那就没你的事了