socket编程(二)TCP cpp

来源:互联网 发布:南风知我意在线阅读 编辑:程序博客网 时间:2024/05/01 08:57

TCP cpp socket

这里的cpp实现可以对比这里的Python实现一起食用,效果更佳
下面代码参考 http://www.tuicool.com/articles/MfaI7bY (其实基本是抄袭~~~)

TCPServer.cpp

//// Created by hui on 16-11-22.///** * This file is a test for tcp server using socket * visit    http://www.tuicool.com/articles/MfaI7bY * * step is: *      socket : declear a socket *      bind : bind Server IP and Port *      listen : set max listen number *      accept : using dead loop to wait client connect in. *      recv/send : always run in an independent thread to send or recv data with client. *      close: after done something close all socket. */#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#define SERVER_PORT 10000int main(){    int serverSocket;    struct sockaddr_in server_addr;    struct sockaddr_in client_addr;    int addr_len = sizeof(client_addr);    int connectionSocket;    char buffer[200];    int iDataNum;    /** create a socket for server     *  doamain : AF_INET means ipv4     *  type    : SOCK_STREAM , usually use with TCP     *  protocol: IPPROTO_IP is Dummy protocol for TCP,会自动选择type类型对应的默认协议     * */    if((serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0){        perror("socket");        return 1;    }    /** bind server socket with (IP, PORT) */    bzero(&server_addr, sizeof(server_addr));    server_addr.sin_family = AF_INET;       // using ipv4    server_addr.sin_port = htons(SERVER_PORT);    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);    if(bind(serverSocket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0){        perror("connect");        return 1;    }    /** set the max listen number to 5 */    if(listen(serverSocket, 5) < 0){        perror("listen");        return 1;    }    /** open a dead loop to wait client to connect in */    while(1){        printf("Listening on port: %d\n", SERVER_PORT);        connectionSocket = accept(serverSocket, (struct sockaddr*)&client_addr, (socklen_t*)&addr_len);        if(connectionSocket < 0){            perror("accept");            continue;        }        /** if connection had been set up, then recv or send data with client */        printf("\nrecv data from %s:%d\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port));        while(1){            iDataNum = (int)recv(connectionSocket, buffer, 1024, 0);            if(iDataNum < 0){                perror("receive");                continue;            }            buffer[iDataNum] = '\0';            if(strcmp(buffer, "over") == 0 || strcmp(buffer, "quit") == 0) {                close(connectionSocket);                break;            }            printf("recv %d bytes data is:\n%s\n", iDataNum, buffer);            send(connectionSocket, buffer, (size_t)iDataNum, 0);        }        if(strcmp(buffer, "quit") == 0) {            close(serverSocket);            break;        }    }    return 0;}

TCPClient.cpp

//// Created by hui on 16-11-22.///** * This is a test file for TCP Client using socket * visit    http://www.tuicool.com/articles/MfaI7bY * * steps: *      socket : create a cleint socket *      connect : connect to server socket *      recv/send : excahnge data with server in a dead loop *      clsoe: close socket*//*socket tcp客户端*/#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#define SERVER_PORT 10000int main(){    int clientSocket;    struct sockaddr_in server_addr;    char sendbuf[200];    char recvbuf[200];    int iDataNum;    if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0){        perror("socket");        return 1;    }    server_addr.sin_family = AF_INET;    server_addr.sin_port = htons(SERVER_PORT);    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");    if(connect(clientSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){        perror("connect");        return 1;    }    printf("connect with destination host...\n");    while(1){        printf("Input your world:>");        scanf("%s", sendbuf);                   // read a word, space or \n to end input        printf("\n");        send(clientSocket, sendbuf, strlen(sendbuf), 0);        if(strcmp(sendbuf, "quit") == 0) break;        iDataNum = (int)recv(clientSocket, recvbuf, 200, 0);        recvbuf[iDataNum] = '\0';        printf("recv data of my world is: %s\n", recvbuf);    }    close(clientSocket);    return 0;}
0 0
原创粉丝点击