私のCクライアントサーバープログラムには非常に奇妙な問題があります。クライアントサーバーCプログラムの受信値が一致しないuint8_tの送信
私はnet_send(uint8_t *buf)
と呼ばれる機能を持っているとします。この関数は、クライアント側で使用されます。同様に私はクライアントからデータを受け取るnet_recv(void* buf)
と呼ばれるサーバで機能を持っています。ものすごく単純。
問題は、サーバがchar配列としてprintfできないことです。クライアントマシンとサーバーマシンとそのコンパイラは8ビットのcharをサポートしています。
ここでは例:配列位置の
char name[1024];
name[0] = 'k';
name[1] = 'a';
name[2] = 'n';
name[3] = 'e';
、残りは0です。 Iは、サーバ側でこの
net_send((uint8_t*)name);
ようnet_sendと呼ばれる、私はこのようなデータ受信:私はuint8_t受信アレイの最初のいくつかのASCIIの小数点以下の値をチェックする場合も同様
uint8_t buf2[1024];
net_recv(buf2);
printf("%s\n", (unsigned char*) buf2); // prints NOTHING
を、Iこれを見つける
buf2[0] ==> 4 // which is end-of-transmission character
buf2[1] ==> 0 // null character
buf2[2] ==> 'k' // actually an ASCII value for 'k'
buf2[3] ==> 'a' // actually an ASCII value for 'k'
buf2[4] ==> 'n' // actually an ASCII value for 'k'
buf2[5] ==> 'e' // actually an ASCII value for 'k'
なぜこの奇妙な動作ですか?何か案は? 最初の2文字を消去した後でも、char配列を印刷できません。 uint8_t
をchar
の値に変換するために要素コピーを作成しても、char配列は印刷されません。また、string.hヘッダファイルからmemcpyを使用すると、char配列を取得できません。 char配列や文字列を取得できないため、サーバーでの処理はできません。
アイデア?または、受け取ったuint8_tをどのようにchar値に変換してchar配列として見えるかを指します。または、あなたは何が起こっていると思いますか?
乾杯、 K.バッファリングされたデータと
実際の内容はどこにあるのですか?buf2 [2] 'からprintinを試してみましたか? –
私はそれを言いました。私も新しいバッファを作成し、forループを使用して実際のコンテンツを1つずつコピーします。それでも新しいバッファには何も表示されません。奇妙な! – Khawar
net_send関数は文字列を送信する前に長さのカウントを送信していることを確認します(必要な場合)、受信時にそれを処理する必要があります。net_sendのソースを投稿する – pm100