如何在TCP中按下Enter键之前接收数据流?

时间:2018-10-25 08:33:43

标签: c# server client chatroom

我正在建立一个TCP聊天室,多个客户端可以在其中连接到TCP服务器。我能够中继发送给所有客户端的消息,但不幸的是,它在键入时会发送每个字母,这会使格式混乱。我想要的行为是仅在按下“ Enter”键时才发送消息。

我遇到的另一个问题是,当我询问用户名时,它只会读取我键入的字符串的第一个字符作为用户名。我尝试调试它,但找不到问题。下面是我发送和接收数据的方法。

    public void ReadData(object socket)
    {
        Socket s = (Socket)socket;

        byte[] buffer = new byte[1024];
        int k = 0;
        while (true)
        {               
            k = s.Receive(buffer);
            // event that triggers the Message() method
            SendGlobalMessage(s, buffer.GetString(k));  
        }
    }

    public void Message(Socket s, string msg)
    {
        string newMsg = String.Format("[{0}: {1}]", Connections[s], msg);
        foreach (Socket st in Connections.Keys)
        {
            st.Send(newMsg.ToByteArray());
        }
    }

请向我展示一些示例,说明我可以做些不同的事情,以便我对更改的内容有深刻的了解。谢谢。

1 个答案:

答案 0 :(得分:0)

假设这是 WinForms

public Form1()
{
   InitializeComponent();
   textBox1.KeyPress += CheckEnterKeyPress;
}

private void CheckEnterKeyPress(object sender, KeyPressEventArgs e)
{
   if (e.KeyChar == (char)Keys.Return)
   {
      var textbox = sender as TextBox;
      Message(socket, textbox.Text);
   }
}