多线程读写同一个套接字c#

时间:2015-05-29 23:33:00

标签: c# .net multithreading sockets invalidoperationexception

PS:对不起我的英语我能理解,但写起来并不是那么好。非常欢迎更正

首先,我在这里阅读了一些答案并且已经知道了我的问题...... 嗯,我在这里,因为如果没有其他解决方案,我需要对我的服务器进行一些痛苦的更改...

我们走了。

我有一台服务器和一台客户端在同一个端口上侦听和接听。 在我的服务器内部,我只有一个线程可以读取,处理和发送结果。这里没问题,没关系,但是我的客户端有多个线程正在做同样的事情,并导致错误的消息,如: 一个线程发送消息并等待答案, 其他线程发送其他消息,第一个线程将其作为答案捕获,所以第一个的真正答案是给第二个,所以所有2个接收错误的消息并导致客户端的大混乱。

我几乎可以肯定我需要使用端口来读取和写入或信号量,但是如果我可以绕过它,它将会非常有用。 有什么想法吗?

我的沟通课程:

public SenderAndRequester(string ipAdress, int port)
{
    client = new TcpClient();
    IPEndPoint ip_end = new IPEndPoint(IPAddress.Parse(ipAdress), port);
    client.Connect(ip_end);
    if (client.Connected)
    {
        stw = new StreamWriter(client.GetStream());
        str = new StreamReader(client.GetStream());
        stw.AutoFlush = true;
        str.DiscardBufferedData();
    }
}
public string communicate(string message)
{
    var comming = str.ReadLineAsync();
    stw.WriteLine(message);
    return comming.Result;
}

这里使用它的类

 public MyConstructor(){
            com = new Communicator(new SenderAndRequester(ip, port));

            while (!com.InitServer(firstVar,secondVar,...)) ;
            //code continue ...
            mnt = new Task(Tracker, ctsMonitor.Token,    TaskCreationOptions.LongRunning);
            mnt.Start();
        }

类主线程......

private bool nextStatus()
{
    //code continue..

        if (!com.RequestNewStatus())
        {
            _Error = com.Error + " on communicator";
            return false;
        }
        status = com.ServerStatus; 
        // code continue ...
        return true;

    }

和各种其他线程之一

private void Tracker()
{
    while (!ctsMonitor.IsCancellationRequested)
    {
        //code continue
        refresh = com.RequestCriticalData();
        Thread.Sleep(100);
    }
}

0 个答案:

没有答案