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=cli
SER=ser
DIR=.
CC=g++
SER_OBJ=$(DIR)/ser.o
CLI_OBJ=$(DIR)/cli.o
SER_SRC=$(DIR)/ser.cpp
CLI_SRC=$(DIR)/cli.cpp
all:$(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:clean
clean:
@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;
}