0

私はこれで髪を引っ張っています。サーバーにいくつかのデータを送信しているので、それをバッファに入れてからバッファを送信します。すべて問題ないように見えますが、サーバー上では文字列がさまざまな時点で途切れているため、たとえば、「12345678901234567890123456789012」ではなく「1234567890123\0\0\0...」と表示されます。

すべての int は正常に機能し、正常に転送されます。メッセージ全体が伝わらない理由は誰にもわかります。サーバーはストリームからメッセージ全体を読み取り、未読のバイトはなく、クライアントは 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);
        }

    }
4

1 に答える 1

0

解決策はエンコーディングにありました。

エンコーディングを修正すると、すべてが正常に機能し、すべての文字列がサーバーから送信されたとおりに表示され、完全に機能します。

于 2012-03-14T21:29:16.440 に答える