// echoClient.cpp - Use: echoClient or // Visual C++ Project | Settings | Link | Object/Library modules | ws2_32.lib #define WIN32_LEAN_AND_MEAN #include #include int main(int argc, char* argv[]) { char buffer[128]; int retval; unsigned int addr=0; struct sockaddr_in sin; struct hostent *host; WSADATA wsaData; SOCKET s; WSAStartup(0x202,&wsaData); // Startup host = gethostbyname(argv[1]); if (!host) // IP used instead of a name? addr = inet_addr(argv[1]); if ((!host) && (addr == INADDR_NONE) ) { // Failed to resolve name or IP cout << "Unable to resolve " << argv[1] << '\n'; return -1; } if (host != NULL) { // Copy server info memcpy(&(sin.sin_addr),host->h_addr,host->h_length); sin.sin_family = host->h_addrtype; } else { sin.sin_addr.s_addr = addr; sin.sin_family = AF_INET; } sin.sin_port = htons(888); // Create socket if ((s = socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET){ cout << "socket() failed with error " << WSAGetLastError() << '\n'; return -1; } // Connect to server port if (connect(s,(struct sockaddr*)&sin,sizeof(sin)) == INVALID_SOCKET) { cout << "connect() failed with error " << WSAGetLastError() << '\n'; return -1; } cout << "Opened connection.\n"; flush(cout); while(cin >> buffer) { buffer[strlen(buffer)]='\0'; // Send string send(s,buffer,strlen(buffer)+1,0); // Receive while connection not closed retval=recv(s,buffer,sizeof(buffer),0); // Make buffer into 0 terminated string if(retval < sizeof(buffer)) buffer[retval]='\0'; // Echo what is received cout << "Received " << buffer << "\n"; flush(cout); } closesocket(s); cout << "Closed connection.\n"; flush(cout); return 0; }