无法从 tcp 服务器读取数据

Unable to read data from tcp server

我创建了一个简单的 C# 客户端应用程序。一旦它连接到服务器,它应该读取从服务器发送的消息。它还具有向服务器发送消息的能力。但是我无法弄清楚读取数据的正确方法。

我在连接到服务器后生成一个线程。线程无限循环运行,有读写两个接口。从 ButtonClick 事件调用 Connect() 方法。

我的代码片段如下:


namespace WpfApp1
{

    public class TCPClientClass
    {
        private StreamWriter SwSender;
        NetworkStream Sender;
        NetworkStream Receiver;
        //private StreamReader SrReciever;
        private Thread thrMessaging;
        TcpClient tcp;
        bool connected = false;

        public bool Connected { get { return connected; } set { connected = value; } }
        //public bool Connect(IPAddress IP, int nPortNo)
        public async Task Connect(IPAddress IP, int nPortNo)
        {
            tcp = new TcpClient();
            try
            {
                //tcp.Connect(strIPAddress.Parse("192.168.137.1"), 2000);
                // tcp.Connect(IP , nPortNo);
                await tcp.ConnectAsync(IP, nPortNo);
                thrMessaging = new Thread(new ThreadStart(ThreadFunction));
                thrMessaging.Start();
                Connected = true;
            }
            catch
            {
                MessageBox.Show("Unable to connect to server");
                //return false;
            }
            //return true;
        }

        public void Disconnect()
        {
            Sender?.Close();
            Receiver?.Close();
            tcp?.Close();
            //tcp?.Client.Disconnect(false);
            thrMessaging.Abort();
            Connected = false;
        }
        private void ThreadFunction()
        {
            while (thrMessaging.IsAlive)
                DoTasks();
        }
        private void DoTasks()
        {
            if (Connected)
            {
                var a = ReadMessages();
                SendMessages();
            }
        }

        private /*void*/async Task ReadMessages()
        {
            byte[] data = new byte[4096];
            //Int32 bytesRead = 0;
            //Task<int> bytesReadTask;
            String responseData = String.Empty;
            Receiver = tcp.GetStream();

            try
            {
                //bytesReadTask = Receiver.ReadAsync(data, 0, data.Length);

                //responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytesReadTask.Result);
                var response = await Receiver.ReadAsync(data, 0, data.Length);
                MessageBox.Show("Server response was " + response);
                Thread.Sleep(1000);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void SendMessages()
        {
            try
            {
                string strSendData = "Hello from GUI";
                Byte[] data = System.Text.Encoding.ASCII.GetBytes(strSendData);
                Sender = tcp.GetStream();

                Sender.Write(data, 0, data.Length);
                Sender.Flush();
                Thread.Sleep(1000);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
    }

}

你应该改变

    var response = await Receiver.ReadAsync(data, 0, data.Length);
    MessageBox.Show("Server response was " + response);

    var response = await Receiver.ReadAsync(data, 0, data.Length);
    string result = System.Text.Encoding.Default.GetString(data);
    MessageBox.Show("Server response was " + result);

如果您仍然遇到问题..我的服务器代码:

public class tcpServer
{
    public void method()
    {
        TcpListener server = new TcpListener(IPAddress.Any, 9999);
        server.Start();
        TcpClient client = server.AcceptTcpClient();
        NetworkStream ns = client.GetStream();

        byte[] hello = new byte[100];
        hello = Encoding.Default.GetBytes("hello world");

        while (client.Connected)
        {
            ns.Write(hello, 0, hello.Length); 
        }
    }
}