C#SOcket传送文件加上延迟新建线程就可以正常传送。不加就不能传送。

AW AW 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
文件1:12.exe
文件2:12.zip


下面我简单说一下代码。没看懂就去看一下下面的详细代码。辛苦了
接收端:一个非常简单的接收端。简单到不行的接收端。接收文件的缓冲区还有FileStream这两个设置的值。都大于发送过来文件的总大小。例如发送端总字节数为40万。接收端设置的值为50万字节。
发送端。一个非常简单的发送端。简单到不行的发送端。
问题就出现在这里了。如果给Connect和send之家加上一个线程暂停(1毫秒)就行。或者Connect后创建一个新线程了来执行发送都可以正常传送文件。但是不加线程暂停不创建新线程在一个线程上。那么文件就不能发送成功。

发生的现象:1,如果加上线程暂停。发送过去的40万字节的.exe形成50万字节的.exe还是可以正常运行的。但是发送的压缩文件不行.
2,如果接收端设置为正常文件大小。那三种情况都是正常的。

void aa() //这个是发送端
{
string imagePath = "D:\\12.exe";
IPAddress ip = IPAddress.Parse("192.168.1.3");
IPEndPoint ipe = new IPEndPoint(ip, 5000);
//创建Socket
Socket cSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
cSocket.Connect(ipe);
//Thread.Sleep(1); //这里到send那里加上线程暂停或者创建新线程文件都可以发送成功。
if (cSocket.Connected)
{
FileStream reader = new FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.None);
int filelength = (int)reader.Length;
byte[] buffer = new byte[filelength]; //创建文件缓冲区
reader.Read(buffer, 0, filelength); //读取文件长度的字节添加到缓冲区
int ru =cSocket.Send(buffer, 0, filelength, SocketFlags.None);
//MessageBox.Show(cSocket.SendBufferSize.ToString());
}
//创建FileStream对象
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}



//这里是接收端
private void button1_Click(object sender, EventArgs e)
{
string path = "E://da.exe";
IPAddress ip = IPAddress.Parse("192.168.1.3");
IPEndPoint ipe = new IPEndPoint(ip, 5000);
//创建Socket
Socket cSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
cSocket.Bind(ipe);
cSocket.Listen(0);
Socket nSocket=cSocket.Accept();

//byte[] buffs1= new byte[1024];
//nSocket.Receive(buffs1);
//int Filelength = BitConverter.ToInt32(buffs1, 0);
byte[] buffs2 = new byte[50000000];
//423424
if (nSocket.Connected)
{
nSocket.Receive(buffs2, 0, buffs2.Length, SocketFlags.None);

}
using (FileStream writer = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
writer.Write(buffs2, 0, 50000000);
writer.Flush();
}
MessageBox.Show("完成");

}
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
AW
C# 111,128 成员 642,537 内容