TCPソケット送受信(VC++) Windows Sockets APIを使用するTCPソケット送受信のメモです。 tcp_server()は、サーバー側のプログラムです。listen用のソケットを作成して、listenをする、クライアントからの接続要求を受けたら、Acceptで通信用のソケットを作成する。クライアントから受信を受けたら、返信をするような処理です。 #include "stdafx.h" #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") void tcp_server() { unsigned short port = 10000; SOCKET sockListen; SOCKET sockWork; struct sockaddr_in sockAddrInListen; struct sockaddr_in sockAddrInWork; memset(&sockAddrInListen, 0, sizeof(sockAddrInListen)); sockAddrInListen.sin_port = htons(port); sockAddrInListen.sin_family = AF_INET; sockAddrInListen.sin_addr.s_addr = htonl(INADDR_ANY); sockListen = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == sockListen) return; if (SOCKET_ERROR == bind(sockListen, (struct sockaddr *) &sockAddrInListen, sizeof(sockAddrInListen))) { closesocket(sockListen); return; } if (SOCKET_ERROR == listen(sockListen, 1)) { closesocket(sockListen); return; } int iSizeofSockAddrInWork = sizeof(sockAddrInWork); sockWork = accept(sockListen, (struct sockaddr *)&sockAddrInWork, &iSizeofSockAddrInWork); if (INVALID_SOCKET == sockWork) { closesocket(sockListen); return; } while(1) { char buff[256]; memset(buff, 0, sizeof(buff)); int len = recv(sockWork, buff, 256, 0); if(len <= 0) break; printf("Data Received = %s\n", buff); strcat(buff, "3."); send(sockWork, buff, strlen(buff)+1, 0); } closesocket(sockWork); closesocket(sockListen); } void tcp_client() { unsigned short port = 10000; SOCKET sockClient; struct sockaddr_in sockAddrInServer; memset(&sockAddrInServer, 0, sizeof(sockAddrInServer)); sockAddrInServer.sin_port = htons(port); sockAddrInServer.sin_family = AF_INET; sockAddrInServer.sin_addr.s_addr = inet_addr("192.168.0.5"); sockClient = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == sockClient) return; if (SOCKET_ERROR == connect(sockClient, (struct sockaddr *) &sockAddrInServer, sizeof(sockAddrInServer))) return; for(int i = 0; i < 5; i++) { char sendbuff[] = "hello, 1+2="; send(sockClient, sendbuff, strlen(sendbuff)+1, 0); Sleep(1000); char recvbuff[256]; memset(recvbuff, 0, sizeof(recvbuff)); int len = recv(sockClient, recvbuff, 256, 0); if(len <= 0) { break; } printf("Data Received = %s\n", recvbuff); } closesocket(sockClient); } int main(int argc, char* argv[]) { WSADATA wsadata; if (0 != WSAStartup(MAKEWORD(2,0), &wsadata)) { printf("WSAStartup Faild.\n"); return -1; } //tcp_server(); tcp_client(); WSACleanup(); return 0; } |