我正在建立一个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());
}
}
请向我展示一些示例,说明我可以做些不同的事情,以便我对更改的内容有深刻的了解。谢谢。
答案 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);
}
}