MAC OS X socket 2 [a simple example]

來源:互聯網
上載者:User

標籤:blog   http   資料   os   2014   art   

MAC OS X socket 2 [a simple example]

Xcode->New Workspace

XCode->New Project: C: [Add to : ?]

Server: 

code

////  main.c//  s2//  Server//  Created by DMD on 4/7/14.#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <fcntl.h>#include <sys/shm.h>#define MYPORT  12345#define QUEUE   20#define BUFFER_SIZE 1024//Severint main(int argc, const char * argv[]){    printf("\nServer:\n");    ///定義sockfd    int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);    if(-1 == server_sockfd)    {        printf("initialize socket fail ! \r\n");        return -1;    }    printf("initialize socket ok !\r\n");        ///定義sockaddr_in    struct sockaddr_in server_sockaddr;    server_sockaddr.sin_family = AF_INET;    server_sockaddr.sin_port = htons(MYPORT);    server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);        ///bind,成功返回0,出錯返回-1    if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1)    {        perror("bind");        exit(1);    }    printf("bind ok !\r\n");              ///listen,成功返回0,出錯返回-1    if(listen(server_sockfd,QUEUE) == -1)    {        perror("listen");        exit(1);    }    printf("Starting listen......\r\n");    printf("(Please run Client and input something)\r\n");         ///用戶端通訊端    char buffer[BUFFER_SIZE];    char send_client_buffer[BUFFER_SIZE];    struct sockaddr_in client_addr;    socklen_t length = sizeof(client_addr);        ///成功返回非負描述字,出錯返回-1    int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length);    if(conn<0)    {        perror("accept connect failed");        exit(1);    }    printf("start accept data from Client...\r\n");            while(1)    {        memset(buffer,0,sizeof(buffer));        memset(send_client_buffer,0,sizeof(send_client_buffer));        //開始接受來自伺服器資訊        int len = recv(conn, buffer, sizeof(buffer),0);        //printf("Client Said,\"%s\"\n",buffer);        printf("client said:%s",buffer);        //如果輸入"exit",表示讓伺服器跳出while,即不再接受來自用戶端的資料,並且關閉伺服器        if(strcmp(buffer,"exit\n")==0)        {            break;        }        else if(strcmp(buffer,"100\n")==0)        {          sprintf(send_client_buffer,"hello, this is one handred :%s",buffer);        }        else if(strcmp(buffer,"30\n")==0)        {          sprintf(send_client_buffer,"hello, this is thirty :%s",buffer);        }        else        {          sprintf(send_client_buffer,"Server repeat you said that is :%s",buffer);        //將資訊輸出到螢幕上        //fputs(send_client_buffer, stdout);        }        //將字串buffer發送給用戶端conn裡。        send(conn, send_client_buffer, strlen(send_client_buffer), 0);        memset(buffer,0,sizeof(buffer));        memset(send_client_buffer,0,sizeof(send_client_buffer));            }       // 關閉串連    close(conn);    close(server_sockfd);    return 0;}// end


XCode->New Project: C:

Client: 

code

////  main.c//  c2//  Client//  Created by DMD on 4/7/14.#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <fcntl.h>#include <sys/shm.h>#define MYPORT  12345#define BUFFER_SIZE 1024//在main函數裡面加入參數,會讓第一次輸入的時候得到一個未知字元。//int main(int argc, const char * argv[])int main(){    printf("\nClient:\n");    ///定義sockfd    int sock_cli = socket(AF_INET,SOCK_STREAM, 0);    if(-1 == sock_cli)    {        printf("initialize socket fail ! \r\n");        return -1;    }    //printf("initialize socket ok !\r\n");    ///定義sockaddr_in    struct sockaddr_in servaddr;    memset(&servaddr, 0, sizeof(servaddr));    servaddr.sin_family = AF_INET;    servaddr.sin_port = htons(MYPORT);  ///伺服器連接埠    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");  ///伺服器ip        ///串連伺服器,成功返回0,錯誤返回-1    if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)    {        perror("connect");        exit(1);    }    printf("Success connect Server IP:%d ,port :%d !\r\n",servaddr.sin_addr.s_addr,servaddr.sin_port);    printf("Please type something to Server: \r\n");        char sendbuf[BUFFER_SIZE];    char recvbuf[BUFFER_SIZE];    memset(sendbuf,0,sizeof(sendbuf));    memset(recvbuf, 0, sizeof(recvbuf));        //用戶端:輸入字串到sendbuf,用斷行符號結束   while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)   {        //將資料發送到伺服器端        send(sock_cli, sendbuf, strlen(sendbuf),0); ///發送        //如果輸入的是exit,就退出        if(strcmp(sendbuf,"exit\n")==0)        {            break;        }                //接受來自伺服器的反饋資訊        recv(sock_cli, recvbuf, sizeof(recvbuf),0); ///接收        //將資訊輸出到螢幕上        //fputs(recvbuf, stdout);        printf("%s",recvbuf);               memset(sendbuf, 0, sizeof(sendbuf));        memset(recvbuf, 0, sizeof(recvbuf));  }    close(sock_cli);    return 0;}


Test:

STEP1.Run Server

STEP2.Run Client

in client type:

100 enter

30 enter

hello


Success!

原理圖:伺服器和用戶端通訊


END

2014-7-3 by DMD 

相關文章

聯繫我們

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