Winsockについて学び、単純な文字列を送受信するときに奇妙な問題が発生することを学びました。これが私のコードです(純粋なC):
クライアント:
//...
//Declarations and stuff
//----------- SEND SOME DATA -------------------------------------------------
char string1[] = "string-1";
int bytes_sent = 0;
bytes_sent = send(client_socket, string1, strlen(string1), 0);
printf("BYTES SENT: %i\n", bytes_sent);
printf("\n-----------------------------------------------\n\n");
system("pause");
//...
サーバ:
//...
//Declarations and stuff
//----------- START LISTENING FOR REQUESTS ------------------------------------
SOCKET ClientSocket;
#define BUFFER_SIZE 256
int size;
struct sockaddr_in client_info;
char client_ip[16];
char data_received[BUFFER_SIZE];
int bytes_received = 0;
listen(ListenSocket, SOMAXCONN);
while(1){
ClientSocket = accept(ListenSocket, (struct sockaddr *)&client_info, &size);
strcpy(client_ip, inet_ntoa(client_info.sin_addr));
do{
bytes_received = recv(ClientSocket, data_received, BUFFER_SIZE, 0);
if(bytes_received > 0){
printf("DATA RECEIVED FROM %s: %s (%i bytes)\n", client_ip, data_received, bytes_received);
}
}while(bytes_received > 0);
printf("\n-----------------------------------------------\n\n");
}
//...
問題は、サーバーが私の文字列といくつかの奇妙な記号を出力することです(写真を参照)。
ストリームソケットを使用しています。例は非常に単純なので、何が間違っているのかわかりません。文字列またはサーバーのバッファサイズ、あるいはその両方をランダムに変更すると、問題は解消されます(サーバーは文字列をOKで出力します)。send()呼び出しでstrlen()の代わりにsizeof()を使用すると、問題が修正されます。ここで少し迷子になりました。私が何かを逃した場合は親切にしてください、これはここでの私の最初の投稿です。コード全体(基本的にはwinsockの開始とソケットの定義)を提供できます。