晚上好,Visual C# - 字符串追加到字符串無法正常工作
我有一個奇怪的問題。我對Visual C#不是很熟悉,但是我需要編寫一個小套接字應用程序來啓用與iOS應用程序的通信。 請檢查下面我收到數據時觸發的功能。
public void onDataReceived(IAsyncResult asyn)
{
// Debug.WriteLine("Receiving Data");
try
{
CSocketPacket socketId = (CSocketPacket)asyn.AsyncState;
int iRx = 0;
iRx = socketId.thisSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
Decoder d = Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(socketId.dataBuffer, 0, iRx, chars, 0);
System.String szData = new System.String(chars);
Debug.WriteLine(szData);
stringVar += szData;
Debug.WriteLine(stringVar);
szData = "";
startWaitingForData(socketWorker);
}
catch (ObjectDisposedException)
{
Debugger.Log(0, "1", "\n onClientConnection: Socket has been closed!\n");
}
catch (SocketException error)
{
Debugger.Log(0, "1", error.ToString());
}
}
從iphone發送消息到套接字服務器的工作很好。但是有一個問題。如果我發送a.e. 「消息測試」第一個Debug.WriteLine(szData)正確記錄字符。 (字節被設置爲字節[1],因此函數被調用的每個字節)。但是,如果我將szData追加到我的stringVar屬性,它將無法正常工作。 Debug.WriteLine(stringVar)將始終只記錄第一個字符,在我的示例中它將記錄'MMMMMMMMMMMM'(而不是'Message Test')
不知道我在這裏丟失了什麼。任何幫助是真正的讚賞。
謝謝:)
UPDATE: 下面我startWaitingForData功能:
public class CSocketPacket
{
public System.Net.Sockets.Socket thisSocket;
public byte[] dataBuffer = new byte[1];
}
public void startWaitingForData(System.Net.Sockets.Socket soc)
{
// Debug.WriteLine("Start waiting for data");
try
{
if (workerCallBack == null)
{
workerCallBack = new AsyncCallback(onDataReceived);
}
CSocketPacket socketPacket = new CSocketPacket();
socketPacket.thisSocket = soc;
soc.BeginReceive(socketPacket.dataBuffer, 0, socketPacket.dataBuffer.Length, SocketFlags.None, workerCallBack, socketPacket);
}
catch (SocketException error)
{
Debugger.Log(0, "1", error.ToString());
}
}
對於iPhone而言,我使用ASCII編碼:
NSData *data = [[NSData alloc] initWithData:[message dataUsingEncoding:NSASCIIStringEncoding]];
的STRINGVAR被定義爲:
private string stringVar;
聽起來很奇怪 - 字符串連接肯定不會*在.NET中工作,所以不清楚是什麼問題。 (最好使用StringBuilder而不是重複的字符串連接,但這是另一回事。)您能否顯示一個簡短但完整的程序來展示問題? (另外,我強烈建議遵循.NET命名約定。) – 2012-04-24 06:04:47
我認爲我們需要看到'stringVar'和'startWaitingForData'的定義,因爲這似乎與它們的使用方式有關。 – yamen 2012-04-24 06:17:21
我也嘗試過StringBuilder以及相同的結果 – Pascal 2012-04-24 13:49:20