C#SOcket传送文件加上延迟新建线程就可以正常传送。不加就不能传送。
文件1:12.exe
文件2:12.zip
下面我简单说一下代码。没看懂就去看一下下面的详细代码。辛苦了
接收端:一个非常简单的接收端。简单到不行的接收端。接收文件的缓冲区还有FileStream这两个设置的值。都大于发送过来文件的总大小。例如发送端总字节数为40万。接收端设置的值为50万字节。
发送端。一个非常简单的发送端。简单到不行的发送端。
问题就出现在这里了。如果给Connect和send之家加上一个线程暂停(1毫秒)就行。或者Connect后创建一个新线程了来执行发送都可以正常传送文件。但是不加线程暂停不创建新线程在一个线程上。那么文件就不能发送成功。
发生的现象:1,如果加上线程暂停。发送过去的40万字节的.exe形成50万字节的.exe还是可以正常运行的。但是发送的压缩文件不行.
2,如果接收端设置为正常文件大小。那三种情况都是正常的。
文件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("完成");
}
...全文
相关推荐
C#Socket异步服务器 IOCP 源码
结合这些文件,我们可以构建一个高性能的C#异步Socket服务器,它能够优雅地处理大量的并发连接,同时保持低延迟和高吞吐量。
C#socket C#socket
- 网络延迟:由于网络环境的不确定性,可能会出现数据包丢失或乱序,编程时要考虑这些情况。 - 连接管理:服务器端需要有效管理多个客户端连接,避免资源耗尽。
C#Socket实现客户端之间的UDP通信
通过实践和研究“C#Socket实现客户端之间的UDP通信”的例子,可以加深对UDP通信机制的理解,并提高开发相关应用的能力。
C#Socket多线程编程实例[收集].pdf
多线程机制在套接字编程中的应用:在每个客户端与服务器端连接成功后,它们之间就建立一个线程。这样运用了多线程之后,客户端之间就不会相互影响,即使其中一个出了错误也不会影响到另一个。
c#Socket客户端断线重连
`Thread.Sleep()`方法用于让线程暂停指定时间。为了提高用户体验,我们可以在重试过程中添加心跳检测,即客户端周期性发送一些小数据包到服务器以确认连接状态。


