【问题标题】:TCP Client/Server Messages Not Sending ProperlyTCP 客户端/服务器消息未正确发送
【发布时间】:2017-01-13 13:46:11
【问题描述】:

我刚开始在 C# 中处理与网络相关的事情,并且刚刚创建了一个客户端/服务器模型。我遇到的唯一问题是,当我要发送数据时,它的一部分被切断了。例如,我发送消息“Hello there!”,它只是发送了“Hello”。

例子:

我的服务器代码

    public static TcpClient tcpcl = new TcpClient();
    public static NetworkStream netstream;
    static void Main(string[] args)
    {
        while(!tcpcl.Connected)
        {
            try
            {
                tcpcl.Connect("127.0.0.1", 1234);
            }

            catch
            {

            }
        }
        netstream = tcpcl.GetStream();
        while(tcpcl.Connected)
        {
            byte[] buffer = new byte[tcpcl.ReceiveBufferSize];
            int unicodeData = netstream.Read(buffer, 0, tcpcl.ReceiveBufferSize);
            string plainText = Encoding.Unicode.GetString(buffer, 0, unicodeData);
            Console.WriteLine(plainText);

        }

        tcpcl.Close();
    }

我的客户代码

    public static TcpListener tcpl = new TcpListener(IPAddress.Any, 1234);
    public static TcpClient tcpcl;
    public static NetworkStream netstream;
    static void Main(string[] args)
    {
        tcpl.Start();
        Console.WriteLine("Waiting for connection...");
        tcpcl = tcpl.AcceptTcpClient();
        netstream = tcpcl.GetStream();
        Console.WriteLine("Connection Established");
        while(tcpcl.Connected)
        {
            Console.WriteLine("Enter a message: ");
            string ptMessage = Console.ReadLine();
            netstream.Write(Encoding.Unicode.GetBytes(ptMessage), 0, ptMessage.Length);
            Console.WriteLine("Sent message");
        }
        tcpcl.Close();
    }

【问题讨论】:

    标签: c# .net tcpclient


    【解决方案1】:

    在您的客户端中,更改:

    string ptMessage = Console.ReadLine();
    netstream.Write(Encoding.Unicode.GetBytes(ptMessage), 0, ptMessage.Length);
    

    收件人:

    string ptMessage = Console.ReadLine();
    byte[] bytes = Encoding.Unicode.GetBytes(ptMessage);
    netstream.Write(bytes, 0, bytes.Length);
    

    Write() 的最后一个参数应该是返回的字节数组的长度,而不是原始字符串的长度。

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 2017-05-03
      • 2019-12-06
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2019-04-04
      • 2018-02-26
      相关资源
      最近更新 更多