你的这个问题出在服务端接收上,把代码改成下面的试试看 int len = 0; if (nSocket.Connected) { len = nSocket.Receive(buffs2, 0, buffs2.Length, SocketFlags.None); } using (FileStream writer = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) { writer.Write(buffs2, 0, len); writer.Flush(); }
你还是先参考网上现成的代码,看看人家都是怎么做客户端和服务端的,不能老凭自己想象瞎写啊
你点了按钮之后,进入ACCEPT?这都什么思路.
而且数据缓冲区,定义成50000000大小,只发送一次,接收一次??
只能说,这个代码用来做实验还行,根本用不了.
->
TCP底层已经做好了数据校验和重发机制,不需要自己再做校验
不过还是需要检测一下数据包长度
if (nSocket.Connected)
{
len = nSocket.Receive(buffs2, 0, buffs2.Length, SocketFlags.None); }
using (FileStream writer = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
writer.Write(buffs2, 0, len);
writer.Flush();
}
如果发送端给Connect和send之家加上一个线程暂停(1毫秒就行)。或者Connect后创建一个新线程了来执行发送都可以正常传送文件。但是不加线程暂停,不创建新线程在一个线程上。那么文件就不能发送成功。
理论上不应该出现这个问题才对。