0

cのtcpソケットを使用して2バイトを送信する必要があります。

これまでの私の試み:

static void send_request(int sockfd) {
    uint8_t buffer[SEND_BYTES];
    uint8_t requestLowByte = 0;
    uint8_t requestHighByte = 0;

.... calculating the values for the two bytes

    bzero(buffer,SEND_BYTES);
    buffer[0] = requestLowByte;
    buffer[1] = requestHighByte;

    connfd = write(sockfd, buffer, strlen(buffer));
    if (connfd < 0) {
        bail_out(EXIT_FAILURE, "ERROR writing to socket\n", progname);
    }
}

テスト値:値248と127をループでサーバーに送信しようとしました。私が受け取ったサーバー側:248 127、7 248、127 7、7 7,7 7、248 127 ...余分な値はどこから来るのですか?

よろしくお願いします。

4

2 に答える 2

3

この行:

connfd = write(sockfd, buffer, strlen(buffer));

する必要があります:

connfd = write(sockfd, buffer, SEND_BYTES);

strlen関数はバッファの長さを計算するためにaを探していますが、送信する配列の2番目の値\0の後にあることを確認していないため、そこでは未定義の動作です。\0

于 2013-03-15T18:05:49.813 に答える
0

SEND_BYTESですか?2?はいの場合strlen、終了ゼロが。で上書きされるため、正しく機能しませんrequestHighByteSEND_BYTES> 2にするか、バイト数を決定するために使用しsizeof(buffer)ます。

また、結果writeが送信するデータの量と正確に等しいかどうかを確認することもできます。

于 2013-03-15T18:05:26.860 に答える