晚上好,
我有一个奇怪的问题。我对 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 向套接字服务器发送消息效果很好。但是有一个问题。如果我发送 ae“消息测试”,第一个 Debug.WriteLine(szData) 会正确记录字符。(字节设置为字节[1],因此对于每个字节,函数都会被调用)。但是,如果我将 szData 附加到我的 stringVar 属性,它将无法正常工作。Debug.WriteLine(stringVar) 将始终只记录第一个字符,在我的示例中它将记录“MMMMMMMMMMMM”(而不是“消息测试”)
不知道我在这里缺少什么。任何帮助都非常感谢。
谢谢 :)
更新:在我的 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;