前提・実現したいこと
PC-PC間でネットワーク通信(TCP)で、
コマンドの送受信をするプログラムをVisual C++にて作成しようとしています。
ネットでの調査より、ソケット通信により実現可能と考え、
色々なリンク先を参考に、ソフトを作成しています。
現在、自PCから自PCに向けてコマンドを送ることで動作確認をしようとしており、
(クライアント側ではなく)サーバー側のプログラムの動作確認中です。
実行すると、listen関数でエラーが発生しており、
どうすればエラーが出ないようになるかが分かっておらず、
解決方法を知りたい次第です。
発生している問題・エラーメッセージ
以下のソースのlisten(sock, SOMAXCONN); のところでエラー10022が発生しています。 調べたところ、「パラメータはbind関数でバインドされていません。」なのだそうですが、 bind関数実行後のWSAGetLastError()では0となっており、バインドされているという認識でいます。
該当のソースコード
Visual
1 int ret; 2 SOCKET sock, sock2; 3 struct sockaddr_in sinme; 4 struct sockaddr_in from; 5 int len = sizeof(from); 6 int one = 1; 7 short port = 10001; 8 char message[1024]; 9 WSADATA wsaData; 10 11 ret = WSAStartup(MAKEWORD(2, 0), &wsaData); 12 if (ret != 0) { 13 printf("initialize error\n"); 14 } 15 16 sock = socket(AF_INET, SOCK_STREAM, 0); 17 18 sinme.sin_family = AF_INET; 19 sinme.sin_port = htons(port); 20 sinme.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 21 22// setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&yes, sizeof(yes)); 23 24 bind(sock, (struct sockaddr *)&sinme, sizeof(sinme)); 25 ret = WSAGetLastError(); 26 if (ret != 0) { 27 printf("bind error : %d\n", WSAGetLastError()); 28 return; 29 } 30 31 ret = listen(sock, SOMAXCONN); 32 if (ret != 0) { 33 printf("listen error : %d\n", WSAGetLastError()); 34 return; 35 } 36 37 //接続要求待ち 38 printf("Waiting for Connection Request.\n"); 39 sock2 = accept(sock, (struct sockaddr *)&from, &len); 40 if (sock2 < 0 ) { 41 printf("Can’t accepted.\n"); 42 exit(0); 43 } else { 44 printf("Connected from %s.\n",inet_ntoa(from.sin_addr)); 45 } 46 47 //ソケットからのデータ待ち 48 recv(sock2, message, 1024, 0); 49 printf("Received Message=%s\n",message); 50 close(sock);//切断処理
試したこと
関係あるのか分かりませんが、ファイアウォールを無効にしてみましたが、
結果に変化はありませんでした。
補足情報(FW/ツールのバージョンなど)
●環境
windows 10 Professional 64bit
visual C++ 2017
回答3件
あなたの回答
tips
プレビュー