无法使用readline()读取c#中的TCP套接字

本文关键字:读取 中的 TCP 套接字 readline | 更新日期: 2023-09-27 18:25:15

我在C#中制作了一个简单的TCP客户端/服务器,但我遇到了问题。当我用telnet测试代码时,服务器正在读取套接字并写入结果。但是,当我的客户端在套接字上写句子时,服务器在readLine函数处被阻塞。

这是我的客户:

 public Boolean initConnection(String ip)
        {
            try
            {
              this.client.Connect("127.0.0.1", 40000);
              this.output = this.client.GetStream();
              this.reader = new StreamReader(this.output, Encoding.UTF8);
              this.writer = new StreamWriter(this.output, Encoding.UTF8);
              writer.Write("one sentence");
              return (true);
            }
          catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return (false);
            }
        }

这里有我的服务器:

class SNetwork
    {
        private Thread Tread;
        private TcpListener server;
        private TcpClient client;
        private StreamReader reader;
        private StreamWriter writer;
        private NetworkStream output;
        private State state;
        public void initReading()
        {
            this.server = new TcpListener(IPAddress.Any, 40000);
            output = client.GetStream();
            reader = new StreamReader(output, Encoding.UTF8);
            writer = new StreamWriter(output, Encoding.UTF8);
            this.Tread = new Thread(new ThreadStart(this.read)); // this.Tread is a thread
            this.Tread.Start();
        }
   private void read()
        {
            try
            {
                while (Thread.CurrentThread.IsAlive)
                {
                    String result;
                    if (this.client.Client.Poll(10, SelectMode.SelectRead))
                    {
                        this.state = State.Closed;
                        break;
                    }
                    else
                    {
                        result = reader.ReadLine();
                        if (result != null && result.Length > 0)
                            Console.WriteLine(result);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
}

有人能帮我吗?我找不到解决方案

无法使用readline()读取c#中的TCP套接字

此代码:

writer.Write("one sentence");

不是在写行终止符,所以你的服务器代码不知道你已经完成了这行。将其更改为WriteLine(并刷新写入程序),应该没问题。

您需要始终记住,TCP/IP是一个基于流的协议-您不能指望服务器接收到与您发出Write调用一样多的Read调用的数据,如果您要在顶部使用线路终止协议,则需要确保您终止了线路。

(另外,遵循.NET命名约定是个好主意…)