Как получить поток данных до нажатия клавиши Enter в TCP? - PullRequest
0 голосов
/ 25 октября 2018

Я создаю чат-комнату TCP, где несколько клиентов могут подключаться к серверу TCP.Я могу передавать сообщения, которые я отправляю всем клиентам, но, к сожалению, он отправляет каждое письмо по мере его ввода, и это портит формат.Мне нужно отправлять сообщения только при нажатии клавиши «Ввод».

Другая проблема, с которой я сталкиваюсь, заключается в том, что когда я спрашиваю имя пользователя, оно читает только первый символ строкиЯ печатаю как имя пользователя.Я попытался отладить его, но не смог понять проблему.Ниже приведены мои методы отправки и получения данных.

    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 голосов
/ 25 октября 2018

Предполагая, что это 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);
   }
}
...