C# 在不同的线程套接字c上发送多个文件#
我正在开发一个在不同计算机之间传输多个文件的软件,但我面临并发问题。当两个线程开始使用Task.Run()发送数据时,接收端的字节会咕哝起来,即数据冲突在一起。我尝试锁定代码中可能导致错误的所有部分,但都没有成功。这是我代码的一部分 //异步传输的代码C# 在不同的线程套接字c上发送多个文件#,c#,multithreading,sockets,C#,Multithreading,Sockets,我正在开发一个在不同计算机之间传输多个文件的软件,但我面临并发问题。当两个线程开始使用Task.Run()发送数据时,接收端的字节会咕哝起来,即数据冲突在一起。我尝试锁定代码中可能导致错误的所有部分,但都没有成功。这是我代码的一部分 //异步传输的代码 public void StartTransferAsync(Socket socket) { Task.Factory.StartNew(() => {
public void StartTransferAsync(Socket socket)
{
Task.Factory.StartNew(() =>
{
lock (this)
{
uploader = new Uploader(this, socket);
uploader.Upload();
}
});
}
//接收传入的异步文件的代码
public byte[] DownloadData()
{
int total = 0;
int recv = 0;
int size = 0;
int dataleft = 0;
byte[] data;
byte[] dataSize = new byte[4];
recv = socket.Receive(dataSize, 0, 4, 0);
size = BitConverter.ToInt32(dataSize, 0);
Console.WriteLine($"Size received: {size}");
if (size > 100038)
{
Console.WriteLine("Shii here");
}
dataleft = size;
data = new byte[size];
while (total < size)
{
recv = socket.Receive(data, total, dataleft, 0);
total += recv;
dataleft -= recv;
}
return data;
}
public byte[]下载数据()
{
int-total=0;
int recv=0;
int size=0;
int dataleft=0;
字节[]数据;
字节[]数据大小=新字节[4];
recv=socket.Receive(数据大小,0,4,0);
size=BitConverter.ToInt32(数据大小,0);
WriteLine($“收到的大小:{Size}”);
如果(尺寸>100038)
{
Console.WriteLine(“这里是Shii”);
}
dataleft=大小;
数据=新字节[大小];
while(总尺寸<尺寸)
{
recv=socket.Receive(数据,总计,数据左侧,0);
总+=recv;
dataleft-=recv;
}
返回数据;
}
请帮助我,我真的需要它。您需要为每个文件使用不同的套接字,或者引入一种协议,将每个文件的数据块打包到接收端,以便接收端知道哪个文件包含哪些数据位。谢谢。我就是这么做的,每个包都有一个ID。但数据冲突是由于concurrency@kingthor你知道一次只能传输一块数据,对吗?如果您同时传输两个数据块,那么它将变得混乱不堪。这种情况甚至没有意义