none
C# tcp 服务器接收问题 RRS feed

  • 问题

  • 初学C#,要接收从客户端发送的数据

     

      IPAddress ip = new IPAddress(new byte[] { 192, 168, 1, 99 });
    TcpListener listener = new TcpListener(ip, 19604);
          
    listener.Start();
    while (true)
    {
        TcpClient remoteClient = listener.AcceptTcpClient();
        NetworkStream streamToClient = remoteClient.GetStream();
        byte[] buffer = new byte[1024];
        int bytesRead = streamToClient.Read(buffer, 0, 1024);

        string msg = System.Text.Encoding.GetEncoding("gb2312").GetString(buffer);
        listBox1.Items.Add(msg);

     

    去掉while循环能接收数据,但连接立即断开

    有while,接收不了数据

    2010年5月26日 4:31

答案

  •  IPAddress ip = new IPAddress(new byte[] { 192, 168, 1, 99 });
    TcpListener listener = new TcpListener(ip, 19604);
     
    listener.Start();
    
    public TcpClient remoteClient;
    public NetworkStream streamToClient;
    
    while (true)
    {
     remoteClient = listener.AcceptTcpClient();
     streamToClient = remoteClient.GetStream();
    
     byte[] buffer = new byte[1024];
     int bytesRead = streamToClient.Read(buffer, 0, 1024);
    
     string msg = System.Text.Encoding.GetEncoding("gb2312").GetString(buffer);
     listBox1.Items.Add(msg);
    
     
    
    
    不过一般都不这样写 NetworkStream+BinaryWriter+BinaryReader接受和发送 而TcpClient+Socket
    2010年6月1日 2:46

全部回复

  • Stream 读完之后把它关掉试试。或者用 using 把它包起来。
    Mark Zhou
    2010年5月26日 9:11
  • 没用,初学不大懂,不明白为什么会不加WHILE会断开连接,是 TcpClient remoteClient = listener.AcceptTcpClient();一次,就只执行一次就断开?那+了while,为何毫无反应。。。
    2010年5月26日 10:33
  • TcpClient remoteClient = listener.AcceptTcpClient();每执行一次,会接受一个新的连接,如果没有新连接进入则会阻塞。按我对您意图的猜测,这行代码应该放到循环外面,也就是接受连接后再开始循环读数据。

    2010年5月26日 10:55
  • 恩,我就是想连接后,发送多条数据,所以我想在连接后,无限循环得到数据,放到外面也没用
    2010年5月26日 15:17
  • TcpClient client = new TcpClient(ip, 19604);
    
    NetworkStream netStream = client.GetStream();
    sr = new StreamReader(netStream, System.Text.Encoding.UTF8);
    threadReceive = new Thread(new ThreadStart(ReceiveData));
    threadReceive.Start();
    
         private void ReceiveData()
        {
          while (true)
          {
            string receiveString = "";
            string receiveState = "";
            try
            {
              receiveString = sr.ReadLine();
              if (receiveString == "???")
              {
                 do something..
              }
            }
            catch (Exception receiveStringErr)
            {
              MessageBox.Show(receiveStringErr.Message);
              break;
            }
          }
        }
    

    Simple life, Simple love ..
    2010年5月27日 0:26
  • 建立一个接收消息的线程。
    2010年5月30日 5:41
  •  IPAddress ip = new IPAddress(new byte[] { 192, 168, 1, 99 });
    TcpListener listener = new TcpListener(ip, 19604);
     
    listener.Start();
    
    public TcpClient remoteClient;
    public NetworkStream streamToClient;
    
    while (true)
    {
     remoteClient = listener.AcceptTcpClient();
     streamToClient = remoteClient.GetStream();
    
     byte[] buffer = new byte[1024];
     int bytesRead = streamToClient.Read(buffer, 0, 1024);
    
     string msg = System.Text.Encoding.GetEncoding("gb2312").GetString(buffer);
     listBox1.Items.Add(msg);
    
     
    
    
    不过一般都不这样写 NetworkStream+BinaryWriter+BinaryReader接受和发送 而TcpClient+Socket
    2010年6月1日 2:46