#include<iostream> #include<Windows.h> #pragma comment(lib,"ws2_32.lib") using namespace std; #define MAX_SIZE 1024
void ErrHanding(const char* errmsg) { fputs(errmsg, stderr); fputc('\n', stderr); system("pause"); exit(1); }
bool initsocket() { WORD wVersionRequested; WSADATA wsadata; int err; wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsadata); if (err) { ErrHanding("WSAStartup err"); return false; }
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2) { WSACleanup(); ErrHanding("LOBYTE err"); return false; } return true; }
int main() { char msg[MAX_SIZE] = { 0 }; if (!initsocket()) return 0;
SOCKET hServerSock = socket(PF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == hServerSock) { ErrHanding("socket err"); }
SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(9999);
if (SOCKET_ERROR == bind(hServerSock, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR))) { ErrHanding("bind err"); return -1; }
if (SOCKET_ERROR == listen(hServerSock, 1)) { ErrHanding("listen err"); return -1; }
SOCKADDR_IN addrCli; int len = sizeof(SOCKADDR);
char sendBuf[100] = { 0 }; char recvBuf[100] = { 0 }; SOCKET clisock;
while (1) { clisock = accept(hServerSock, (SOCKADDR*)&addrCli, &len); if (SOCKET_ERROR == clisock) { ErrHanding("accept err"); } memset(msg, 0, MAX_SIZE); while (len = recv(clisock,msg,MAX_SIZE,0)) { printf("Server msg: \n%s\n", msg);
} closesocket(clisock);
} closesocket(hServerSock); WSACleanup(); return 0;
}
|