// echoServer.cpp - Use: echoServer // Visual C++ Project | Settings | Link | Object/Library modules | ws2_32.lib #define WIN32_LEAN_AND_MEAN #include #include int main(void) { char buffer[128]; int retval, sinlen; struct sockaddr_in sin; WSADATA wsaData; SOCKET s, h; WSAStartup(0x202,&wsaData); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(888); // Port 888 // SOCK_STREAM is TCP if ((s = socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET){ cout << "socket() failed with error " << WSAGetLastError() << '\n'; return -1; } // Bind socket to local port if (bind(s,(struct sockaddr*)&sin,sizeof(sin) ) == SOCKET_ERROR) { cout << "bind() failed with error " << WSAGetLastError() << '\n'; return -1; } // Listen for 1 socekt connection if (listen(s,1)== SOCKET_ERROR) { cout << "listen() failed with error " << WSAGetLastError() << '\n'; return -1; } sinlen = sizeof(sin); while(1) { // Accept incoming connection if ((h=accept(s,(struct sockaddr*)&sin,&sinlen )) == INVALID_SOCKET) { cout << "accept() failed with error " << WSAGetLastError() << '\n'; return -1; } cout << "Opened connection.\n"; flush(cout); // receive while connection not closed while((retval=recv(h,buffer,sizeof(buffer),0)) != SOCKET_ERROR && retval != 0){ // Make into 0 terminated string if(retval < sizeof(buffer)) buffer[retval]='\0'; cout << "Received " << buffer << "\n"; flush(cout); // Echo what is received send(h,buffer,strlen(buffer)+1,0); } closesocket(h); cout << "Closed connection.\n"; flush(cout); } return 0; }