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);
}
}
解决方案在编码中。
在我修复了编码之后,一切工作正常,所有字符串显示为它们从服务器发送,工作完美。