发送字符串C#套接字的奇怪行为

时间:2016-11-30 07:54:55

标签: c# sockets

我有一个Sockets的客户端服务器应用程序。它还没有优化,但这不是问题。每当我发送string喜欢"测试"另一方接收" T \ 0 \ 0 \ 0"因此,只有string的第一个字母和数组的其余部分,保存在哪里,填充0' s。我尝试改变所有类型的值,但似乎无法弄清楚它为什么这样做。奇怪的是,在我发送字符串之前它仍然是整个string但是只要它收到它的第一个字母。有人能帮助我吗?

发送

public void sendData(Socket sendingSocket, String message)
{
    if (sendingSocket == m_workerSocket[0])
    {
        byte[] byData = System.Text.Encoding.ASCII.GetBytes(message);
        m_workerSocket[1].Send(byData);

    }
}

接收

public void OnDataReceived(IAsyncResult asyn)
{
    try
    {
        SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
        int iRx = theSockId.thisSocket.EndReceive(asyn);
        char[] chars = new char[iRx + 15]; //Added this to force the array length for test purposes
         Decoder d = Encoding.UTF8.GetDecoder();
        int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
        //int bytesRead = nwStream.Read(theSockId.dataBuffer, 0, client.ReceiveBufferSize);
        String szData = new String(chars);

        Console.WriteLine(szData);
}

编辑=============================
在发送部分,如果我制动点

m_workerSocket[1].Send(byData);

byData包含整个字符串。所以它与接收端有关,但我不知道是什么

0 个答案:

没有答案