我有一個非常討厭的問題: 我正在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