2017-01-15 16 views
-2

これはreadwriteの関数(@alkで提供)を使用しています。
uint16_t data_size;を正しく送信する方法がわかりません。ここで
は、一般的な例バッファを送信するために、私の実際のコードです:nバイトの書き込みとnバイトの読み取り:uint16_tを使用して読み取るバイト数を送信

uint16_t data_size; 
int retry_on_interrupt = 0; 
char buffer[] = "Hello world!"; 
data_size = (uint16_t) sizeof(buffer);  

/* sending data_size */ 
writen(socket, data_size, 2, retry_on_interrupt); 

/* sending buffer */ 
writen(socket, buffer, sizeof(buffer); 

そして、ここでは一般的な例バッファ受け取るために私の実際のコードです:

/* receiving data_size */ 
readn(socket, &data_size, 2); 

/* receiving buffer */ 
readn(socket, buffer, data_size); 

しかし、これは動作していないが、私があるためだと思いますwritenにはconst char *が必要ですが、代わりにuint16_tを使用しています。
これらの呼び出しはどのようにする必要がありますか?ありがとう。

答えて

1

if (-1 == writen(socket, &data_size, sizeof data_size, 1)) 
{ 
    perror("writen() failed writing size"); 
    exit(EXIT_FAILURE); 
} 

によって

writen(socket, data_size, 2, retry_on_interrupt); 

を交換し、

if (-1 == writen(socket, buffer, data_size, 1)) 
{ 
    perror("writen() failed writing pay-load"); 
    exit(EXIT_FAILURE); 
} 
によって

writen(socket, buffer, sizeof(buffer); 

この行を置き換えます

あなたは間違いなく読み取り機能にもエラーチェックを追加したいと思っています!


また、あなたは、異なるハードウェア・プラットフォームの間で受信/送信するときに、可能endianness (byte-order)問題の世話をしたいと思います。

+0

質問が更新されました。 – UrbiJr

+0

Ok今、すべてのことが明らかです。問題はsendfile呼び出しで発生しました。私は 'offset'をきれいにして、' 0'に再初期化しなければなりませんでした。この質問とは何の関係もありませんでしたが、とにかくそれを伝えたいと思いました! – UrbiJr

関連する問題