我有一个非常讨厌的问题: 我正在C#中的协作文本编辑器工作,我想从列表中的每个客户端编辑共享的文本框,但我被困在来自键盘转换的字符。 下面是keydown事件代码:协作文本编辑器
private void downKey(object sender, KeyEventArgs e)
{
try
{
byte[] data;
switch (e.KeyCode)
{
case Keys.Enter: data = Encoding.UTF8.GetBytes("enter");
break;
case Keys.Back: data = Encoding.UTF8.GetBytes("backspace");
break;
case Keys.Space: data = Encoding.UTF8.GetBytes("space");
break;
default:
data = Encoding.UTF8.GetBytes(e.KeyCode.ToString().ToLower());
break;
}
TcpClient.GetStream().Write(data, 0, data.Length);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
现在从连接到应用程序的客户端列表中的每个客户端应接收与textBox.So对everyclient的“OnDataReceived”回调输入字节数组将此字节数组转换为字符串并尝试通过crossThreadDelegate更新每个客户端的文本框。
public void OnDataReceived(IAsyncResult asyn)
{
try
{
TcpSpecificPacket theSockId = (TcpSpecificPacket)asyn.AsyncState;
int dataReceivedLength = theSockId.thisClient.GetStream().EndRead(asyn);
if (dataReceivedLength != 0)
{
textBoxArrived.Invoke(changeCrossTextBox, new object[] {Encoding.UTF8.GetString(theSockId.dataBuffer, 0, dataReceivedLength)});
WaitForData();
}
}
catch (IOException)
{
}
而现在的crossThread委托的定义:
private void changeCrossTextBox(string mesaj)
{
if (mesaj.Equals("enter"))
{
textBoxArrived.Text += Environment.NewLine;
}
else if (mesaj.Equals("space"))
{
textBoxArrived.Text += " ";
}
else if (mesaj.Equals("backspace"))
{
textBoxArrived.Text = textBoxArrived.Text.Substring(0, textBoxArrived.Text.Length - 1);
}
else
{
textBoxArrived.Text += mesaj;
}
}
但我真正的问题是未来:我不能确定井的转义字符,因为我发送一个字节数组,我将其转换为字符串,然后我尝试用该字符串更新每个客户端的文本框。例如,当我按shift键时,客户端的所有文本框中的字符串都将是“shiftKey”。请告诉我如何处理这些转义字符?是否有一种方法可以用ASCII发送和更新。
谢谢! – 2012-03-22 21:18:46