代码之家  ›  专栏  ›  技术社区  ›  Mohammad

使用tcplistener的多线程处理

c#
  •  0
  • Mohammad  · 技术社区  · 15 年前

            TcpListener TCPListen = new TcpListener(IP2, port);
    
            TCPListen.Start();
    
    
            TcpClient TCP = TCPListen.AcceptTcpClient();
    
    
            NetworkStream NetStream = TCP.GetStream();
    
    
    
    
    
            RijndaelManaged RMCrypto = new RijndaelManaged();
    
    
            byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
            byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
    
    
    
    
            CryptoStream CryptStream = new CryptoStream(NetStream,
               RMCrypto.CreateDecryptor(Key, IV),
               CryptoStreamMode.Read);
    
            StreamReader SReader = new StreamReader(CryptStream);
    

    问题是我应该使用TCPListen.Start()之后的线程;否则会出现错误**(每个套接字地址(协议/网络地址/端口)通常只允许使用一次)** 我怎样才能解决这个问题?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Tim Coker    15 年前

    除了将阻塞调用移动到新线程之外,还可以使用BeginConnect、BeginReceive、BeginSend方法及其相应的End(Connect | Receive | Send),如前所述 here .

    编辑:回复:以下问题来自操作。。。
    而不是打电话 Connect() BeginConnect() 并提供 BeginConnect() EndConnect() . 问题是 块(即停止该线程上的所有代码执行),直到它返回。使用 BeginXXX() EndXXX() 回避这个问题。这个话题实在太多肉了,无法在这里作任何有益的深入解释。在上面链接的MSDN文档中学习。如果你在花了一段时间后有什么特别的问题,请发到这里,我会尽力回答你的问题

        2
  •  1
  •   Lee Hesselden    15 年前

    您只需要为每个端口设置一个侦听器,因为要连接的请求将排队,然后分配给它们自己的TCP客户端。你可以看到下面的链接获得更多信息,但本质上你不应该试图连接多个侦听器,我不认为一个新的线程会让你。

    http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx