windows下面的代碼如下面
//Server.cpp#include <iostream>#include <windows.h>#define IP "127.0.0.1"#define PORT 8888#pragma comment(lib,"ws2_32.lib")using namespace std;char* GetTime();int main(){ WSADATA wsaData; WORD Ret; if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)) { cout << "WSAStartup() Error Whit:" << Ret << endl; WSACleanup(); return -1; }//統一版本類型。 SOCKET sockSer, sockCli; sockSer = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSer, addrCli; addrSer.sin_family = AF_INET; addrSer.sin_port = htons(PORT); addrSer.sin_addr.S_un.S_addr = inet_addr(IP); int len = sizeof(SOCKADDR); bind(sockSer, (SOCKADDR*)&addrSer, len);//綁定通訊端。 listen(sockSer,5);//監聽。 cout << "伺服器正在等待串連......" << endl; sockCli = accept(sockSer, (SOCKADDR*)&addrCli, &len); if (sockCli == -1) { cout << "Accept() Error With:" << sockCli << endl; closesocket(sockCli); closesocket(sockSer); WSACleanup(); } char serbuff[255]; string s; while (1) { recv(sockCli,serbuff,sizeof(serbuff),0); send(sockCli,GetTime(),30, 0); } WSACleanup(); closesocket(sockSer); closesocket(sockCli); return 0;}char* GetTime(){ char buff[255]; SYSTEMTIME sys;//Windows下面的系統時間調用。 GetLocalTime(&sys);//初始化本地時間。 sprintf(buff,"%d:%d:%d:%d:%d:%d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond); return buff;}
//Client.cpp#include <iostream>#include <windows.h>#define PORT 8888#define IP "127.0.0.1"using namespace std;#pragma comment(lib,"ws2_32.lib")int main(){ DWORD Ret; WSAData wsaData; if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) { cout <<"WSAStartup() Error Wiht : "<< Ret << endl; WSACleanup(); return -1; } SOCKET sockCli = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSer; addrSer.sin_family = AF_INET; addrSer.sin_port = htons(PORT); addrSer.sin_addr.S_un.S_addr = inet_addr(IP); //不需要綁定監聽。 int ret = connect(sockCli,(SOCKADDR*)&addrSer,sizeof(SOCKADDR)); if (ret != 0) { cout << "用戶端串連失敗......" << endl; closesocket(sockCli); WSACleanup(); return -1; } else { cout << "客服端串連成功......" << endl; } const char timebuff[] = "times:"; char serbuff[255]; while (1) { send(sockCli,timebuff,strlen(timebuff)+1,0); recv(sockCli,serbuff,sizeof(serbuff),0); //擷取伺服器的本地時間。 cout <<timebuff<<serbuff << endl; Sleep(2000); } return 0;}
linux下面的代碼如下面:
makefile:
CLI=cliSER=serDIR=.CC=g++SER_OBJ=$(DIR)/ser.oCLI_OBJ=$(DIR)/cli.oSER_SRC=$(DIR)/ser.cppCLI_SRC=$(DIR)/cli.cppall:$(CLI) $(SER).PHONY:all$(SER):$(SER_OBJ) @$(CC) -o $@ $^$(CLI):$(CLI_OBJ) @$(CC) -o $@ $^$(SER_OBJ):$(SER_SRC) @$(CC) -c $<$(CLI_OBJ):$(CLI_SRC) @$(CC) -c $<.PHONY:cleanclean: @rm $(DIR)/*.o $(SER) $(CLI)
//ser.cpp
#include <iostream>#include <sys/socket.h>#include <arpa/inet.h>#include <string.h>#include <netinet/in.h>#define PORT 8888#define IP "127.0.0.1"using namespace std;int main(){ int sockSer,sockCli; sockaddr_in addrSer,addrCli; sockSer = socket(AF_INET,SOCK_STREAM,0); addrSer.sin_family = AF_INET; addrSer.sin_port = htons(PORT); addrSer.sin_addr.s_addr = inet_addr(IP); socklen_t len = sizeof(sockaddr); bind(sockSer,(sockaddr*)&addrSer,len); listen(sockSer,5); cout<<"I am waiting......"<<endl; sockCli = accept(sockSer,(sockaddr*)&addrCli,&len); if(sockCli==-1) { close(sockSer); close(sockCli); return -1; } char clibuff[255]; while(1) { recv(sockCli,clibuff,sizeof(clibuff),0); cout<<clibuff<<endl; if(strncmp("quit",clibuff,4)==0) { cout<<"I am quit too!"<<endl; break; } send(sockCli,clibuff,strlen(clibuff)+1,0); } close(sockCli); close(sockSer); return 0;}
//cli.cpp
#include <iostream>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>using namespace std;#define PORT 8888#define IP "127.0.0.1"int main(){ int sockCli = socket(AF_INET,SOCK_STREAM,0); sockaddr_in addrSer; addrSer.sin_family = AF_INET; addrSer.sin_port = htons(PORT); addrSer.sin_addr.s_addr = inet_addr(IP); socklen_t len = sizeof(sockaddr); int ret = connect(sockCli,(sockaddr*)&addrSer,len); if(ret!=0) { cout<<"connect() erorr with :"<<ret<<endl; close(sockCli); return -1; } char serbuff[255]; while(1) { cin>>serbuff; send(sockCli,serbuff,strlen(serbuff)+1,0); if(strncmp("quit",serbuff,4)==0) { break; } memset(serbuff,'\0',sizeof(serbuff)); } close(sockCli); return 0;}