2012-04-02 80 views
-2

我正在构建客户端服务器应用程序,其中客户端必须发送一些字节流,并且服务器根据从客户端接收到的字节进行响应。我正在使用NetworkStream.WriteNetworkStream.Read方法发送和接收数据。客户端能够创建到服务器的TCP连接。在接受连接之后,服务器会执行NetworkStream.Read并等待来自客户端的一些输入。客户使用NetworkStream.Write发送数据,也发送NetworkStream.Flush。但服务器永远不会从Read中唤醒。无法读取C#中的字节流

你们可以建议我这里有什么问题,或者如果你知道任何其他方法通过C#中的TCP连接发送字节流,请让我知道。

谢谢!

+0

第一:请发布您使用的实际代码 - 第二:尝试关闭客户端写入字节后的连接,因为我的猜测是,您正在使用*流*不是正确的方式 – Carsten 2012-04-02 04:13:48

+1

我可以从代码中可以看出,它很可能是由海王星发射的粒子干扰的。我强烈建议你用锡纸遮挡你的整个城市,以获得更高质量的传输。 – 2012-04-02 04:18:17

+0

第一:我已经解释了代码..在这个问题中,我只关注2行,我的客户端是Network.Write,我的服务器是Network.Read。 其次,我正在创建一个连接,并从我的客户端进行写入操作,然后执行Read操作以获取服务器的响应。我在那里僵持不下。 – user1296146 2012-04-02 04:45:06

回答

1

撇开Smart-ass的意见:即使你只对2行代码感兴趣,我敢打赌你的问题是在你的代码中的其他地方。

使用发现的代码的修改版本here,我构建了一个简单的例子,在我的测试中起作用。

public static void Main() 
    { 
     TcpListener server = null; 
     try 
     { 
      // Set the TcpListener on port 13000. 
      Int32 port = 13000; 
      IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 

      // TcpListener server = new TcpListener(port); 
      server = new TcpListener(localAddr, port); 

      // Start listening for client requests. 
      server.Start(); 

      // Buffer for reading data 
      Byte[] bytes = new Byte[256]; 

      Console.Write("Waiting for a connection... "); 

      // Perform a blocking call to accept requests. 
      // You could also user server.AcceptSocket() here. 
      TcpClient client = server.AcceptTcpClient(); 
      Console.WriteLine("Connected!"); 

      // Get a stream object for reading and writing 
      NetworkStream stream = client.GetStream(); 

      stream.Read(bytes, 0, bytes.Length); 
      Console.WriteLine(System.Text.Encoding.ASCII.GetString(bytes)); 
      // Shutdown and end connection 
      client.Close(); 
     } 
     catch (SocketException e) 
     { 
      Console.WriteLine("SocketException: {0}", e); 
     } 
     finally 
     { 
      // Stop listening for new clients. 
      server.Stop(); 
     } 


     Console.WriteLine("\nHit enter to continue..."); 
     Console.Read(); 
    } 

读取调用将等待并返回时,我与另一程序1个字节的发送。我们需要看一些代码来弄清楚为什么这个工作,而你的不工作。