Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不同的线程套接字c上发送多个文件#_C#_Multithreading_Sockets - Fatal编程技术网

C# 在不同的线程套接字c上发送多个文件#

C# 在不同的线程套接字c上发送多个文件#,c#,multithreading,sockets,C#,Multithreading,Sockets,我正在开发一个在不同计算机之间传输多个文件的软件,但我面临并发问题。当两个线程开始使用Task.Run()发送数据时,接收端的字节会咕哝起来,即数据冲突在一起。我尝试锁定代码中可能导致错误的所有部分,但都没有成功。这是我代码的一部分 //异步传输的代码 public void StartTransferAsync(Socket socket) { Task.Factory.StartNew(() => {

我正在开发一个在不同计算机之间传输多个文件的软件,但我面临并发问题。当两个线程开始使用Task.Run()发送数据时,接收端的字节会咕哝起来,即数据冲突在一起。我尝试锁定代码中可能导致错误的所有部分,但都没有成功。这是我代码的一部分

//异步传输的代码

    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你知道一次只能传输一块数据,对吗?如果您同时传输两个数据块,那么它将变得混乱不堪。这种情况甚至没有意义