windows和linux的tcp通訊端編程__區塊鏈

來源:互聯網
上載者:User

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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.