windows 與 mac socket通訊

來源:互聯網
上載者:User

標籤:nbsp   char   oid   等待隊列   can   tin   creat   start   ted   

#include <Winsock2.h>#include <stdio.h>void main(){    // 以下的幾句都是固定的    WORD wVersionRequested;    WSADATA wsaData;    int err;    wVersionRequested = MAKEWORD( 1, 1 );    err = WSAStartup( wVersionRequested, &wsaData );//該函數的功能是載入一個Winsocket庫版本    if ( err != 0 ) {        return;    }    if ( LOBYTE( wsaData.wVersion ) != 1 ||        HIBYTE( wsaData.wVersion ) != 1 ) {            WSACleanup( );            return;     }    //真正socket編程部分    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//連線導向的可靠性服務SOCK_STRAM    SOCKADDR_IN addrSrv;//存放本地地址資訊的    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//htol將主機位元組序long型轉換為網路位元組序    addrSrv.sin_family=AF_INET;    addrSrv.sin_port=htons(6001);//htos用來將連接埠轉換成字元,1024以上的數字即可    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//將socket綁定到相應地址和連接埠上    listen(sockSrv,20);//等待隊列中的最大長度為5    SOCKADDR_IN addrClient;    int len=sizeof(SOCKADDR);    while(1)    {        SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//建立一個新的通訊端用於通訊,不是前面的監聽通訊端        char sendBuf[100];        sprintf(sendBuf,"Server IP is:%s",            inet_ntoa(addrClient.sin_addr));//inet_nota函數是將字元轉換成ip地址        char recvBuf[100];        recv(sockConn,recvBuf,100,0);//伺服器從用戶端接受資料        printf("%s\n",recvBuf);        if(strcmp(recvBuf,"Reconnect")==0)        {            Sleep(5000);            strcpy(sendBuf,"Finished");            send(sockConn,sendBuf,strlen(sendBuf)+1,0);//伺服器向用戶端發送資料        }                closesocket(sockConn);//關閉socket    }}

 Mac 端

#include <netinet/in.h>    // for sockaddr_in#include <sys/types.h>    // for socket#include <sys/socket.h>    // for socket#include <stdio.h>        // for printf#include <stdlib.h>        // for exit#include <string.h>        // for bzero/* #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> */#define HELLO_WORLD_SERVER_PORT    6001#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512int main(int argc, char **argv){     //設定一個socket地址結構client_addr,代表客戶機internet地址, 連接埠    struct sockaddr_in client_addr;    bzero(&client_addr,sizeof(client_addr)); //把一段記憶體區的內容全部設定為0    client_addr.sin_family = AF_INET;    //internet協議族    client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自動擷取本機地址    client_addr.sin_port = htons(0);    //0表示讓系統自動分配一個空閑連接埠    //建立用於internet的流協議(TCP)socket,用client_socket代表客戶機socket    int client_socket = socket(AF_INET,SOCK_STREAM,0);    if( client_socket < 0)    {        printf("Create Socket Failed!\n");        exit(1);    }    //把客戶機的socket和客戶機的socket地址結構聯絡起來    if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))    {        printf("Client Bind Port Failed!\n");        exit(1);    }     //設定一個socket地址結構server_addr,代表格服務器的internet地址, 連接埠    struct sockaddr_in server_addr;    bzero(&server_addr,sizeof(server_addr));    server_addr.sin_family = AF_INET;    if(inet_aton("192.168.1.149",&server_addr.sin_addr) == 0) //伺服器的IP地址來自程式的參數    {        printf("Server IP Address Error!\n");        exit(1);    }    server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);    socklen_t server_addr_length = sizeof(server_addr);    //向伺服器發起串連,串連成功後client_socket代表了客戶機和伺服器的一個socket串連    if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)    {        printf("Can Not Connect To %s!\n",argv[1]);        exit(1);    }         char buffer[BUFFER_SIZE];    bzero(buffer,BUFFER_SIZE);    strcpy(buffer, "Reconnect");    //向伺服器發送buffer中的資料    send(client_socket,buffer,BUFFER_SIZE,0);         //從伺服器接收資料到buffer中    bzero(buffer,BUFFER_SIZE);    int length = 0;    if(recv(client_socket,buffer,BUFFER_SIZE,0)>0)    {        printf("Received %s\n",buffer);    }    //關閉socket    close(client_socket);    return 0;}

 

windows 與 mac socket通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.