NSStream似乎是如何截断数据的

本文关键字:数据 何截断 似乎是 NSStream | 更新日期: 2023-09-27 18:15:54

这事真让我抓狂。我要向服务器发送一些数据,所以我把它放在缓冲区中,然后发送缓冲区。一切似乎都很好,但在服务器上,字符串被切断,在不同的点,所以例如,我得到"1234567890123'0'0'0…"而不是"123456789012345678901234567890123456789012"。

所有的整型都工作得很好,传输也很好。有人知道为什么整个信息不被理解吗?服务器从流中读取整个消息,没有未读的字节,客户端发送68个字节,服务器获得68个字节。是编码的问题吗?

iPhone代码:

int command = 0;
int msgLen =0;
int bytesSent;
(void)memcpy(_data, &command, sizeof(int)); msgLen++; 
(void)memcpy(_data+2, &playerID, sizeof(int)); msgLen++;
NSString *response  = [NSString stringWithString:@"12345678901234567890123456789012"];
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUnicodeStringEncoding]];
(void)memcpy(_data+3, [data bytes], [data length]);
msgLen += [data length];
(void)memcpy(_data+1, &msgLen, sizeof(int)); msgLen++;
bytesSent = [outputStream write:(const uint8_t *)_data maxLength:msgLen];
NSLog(@"sent %d of %d",bytesSent, msgLen);
下面是c#代码
    private void JoinServer(TcpClient client, byte[] buffer)
    {
        int offset = 0;
        int playerid = BitConverter.ToInt32(buffer, offset);
        offset += 4;
        var playerkey = Encoding.Unicode.GetString(buffer, offset, buffer.Length-4);
        System.Diagnostics.Debug.WriteLine(playerkey, "JoinPlayerReceived");
        try
        {
            GetSubscriberByClient(client).PlayerId = playerid;
            SendJoinServerStatus(playerid, playerid);
        }
        catch (Exception)
        {
            SendJoinServerStatus(playerid, 0);
        }
    }

NSStream似乎是如何截断数据的

解决方案在编码中。

在我修复了编码之后,一切工作正常,所有字符串显示为它们从服务器发送,工作完美。