一、服务器端: // test_server.cpp : Defines the entry point for the console application. // #include " stdafx.h " #include " test_server.h " #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /**/ ///// // The one and only application object CWinApp theApp; using namespace std;UINT MainFunc( LPVOID pParam );UINT RecvFunc( LPVOID pParam ); int _tmain( int argc, TCHAR * argv[], TCHAR * envp[]) ... { int nRetCode = 0; cout<<"server started<<endl<<press ESC to stop server..."<<endl; AfxBeginThread(MainFunc,0); while(_getch()!=27); return nRetCode;} UINT MainFunc( LPVOID pParam ) ... { int nRet; //WSAStartup WSADATA wsaData; nRet = WSAStartup(0x101,&wsaData); if(nRet!=0) ...{ cout<<"Fail:WSAStartup"<<endl; return 1; } //socket SOCKET socket_Server; socket_Server = socket(AF_INET,SOCK_STREAM,0); if(socket_Server==INVALID_SOCKET) ...{ cout<<"Fail:socket"<<endl; return 1; } //bind sockaddr_in sockaddr_local; sockaddr_local.sin_family = AF_INET; sockaddr_local.sin_port = htons((u_short)20480); sockaddr_local.sin_addr.s_addr = INADDR_ANY; nRet = bind(socket_Server,(sockaddr *)&sockaddr_local,sizeof(sockaddr_local)); if(nRet!=0) ...{ cout<<"Fail:bind"<<endl; return 1; } //listen nRet = listen(socket_Server,5); if(nRet!=0) ...{ cout<<"Fail:listen"<<endl; return 1; } SOCKET socket_Client; sockaddr_in sockaddr_client; int len = sizeof(sockaddr_client); //accept char temp[512]; socket_Client = accept(socket_Server,(sockaddr *)&sockaddr_client,&len); sprintf(temp,"Connect from :%s",inet_ntoa(sockaddr_client.sin_addr)); cout<<temp<<endl; AfxBeginThread(RecvFunc,(LPVOID)socket_Client); sprintf(temp,"Your IP is : %s",inet_ntoa(sockaddr_client.sin_addr)); send(socket_Client,temp,strlen(temp),0); while(true) ...{ } closesocket(socket_Client); WSACleanup(); return 0;} UINT RecvFunc( LPVOID pParam ) ... { SOCKET socket_Client = (SOCKET)pParam; char temp[512]; int nRet; while(true) ...{ memset(temp,0,512); nRet = recv(socket_Client,temp,sizeof(temp),0); if(nRet<0) ...{ exit(0); } cout<<temp<<endl; send(socket_Client,"message received by server",strlen("message received by server")+1,0); } return 0;} 二、客户机端 // test_client.cpp : Defines the entry point for the console application. // #include " stdafx.h " #include " test_client.h " #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /**/ ///// // The one and only application object CWinApp theApp; // using namespace std; UINT RecvFunc( LPVOID pParam ); int _tmain( int argc, TCHAR * argv[], TCHAR * envp[]) ... { cout<<"Client started"<<endl; cout<<"Try to connect server..."<<endl; int nRet; //WSAStartup WSADATA wsaData; nRet = WSAStartup(0x101,&wsaData); if(nRet!=0) ...{ cout<<"Fail:WSAStartup"<<endl; return 1; } //socket SOCKET sock; sock = socket(AF_INET,SOCK_STREAM,0); if(sock==INVALID_SOCKET) ...{ cout<<"Fail:socket"<<endl; return 1; } //connect HOSTENT *hp; sockaddr_in server; unsigned int addr = inet_addr("127.0.0.1"); hp = gethostbyaddr((char *)&addr,sizeof("127.0.0.1"),AF_INET); if(hp==NULL) ...{ closesocket(sock); cout<<"can not reach host 127.0.0.1"<<endl; return 1; } server.sin_addr.s_addr = *((unsigned long*)hp->h_addr); //server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_family = AF_INET; server.sin_port = htons(20480); nRet = connect(sock,(sockaddr *)&server,sizeof(server)); if(nRet!=0) ...{ cout<<"Fail:conncet"<<endl; return 1; } cout<<"Login server OK"<<endl; char temp[512]; memset(temp,0,512); sprintf(temp,"I'm client"); send(sock,temp,strlen(temp),0); AfxBeginThread(RecvFunc,(LPVOID)sock); while(true) ...{ memset(temp,0,512); cin>>temp; send(sock,temp,strlen(temp)+1,0); } closesocket(sock); WSACleanup(); return 0;} UINT RecvFunc( LPVOID pParam ) ... { SOCKET sock = (SOCKET)pParam; char temp[512]; int nRet; while(true) ...{ memset(temp,0,512); nRet = recv(sock,temp,sizeof(temp),0); if(nRet<0) ...{ exit(0); } cout<<temp<<endl; } return 0;}