并发socket--练习篇

来源:互联网 发布:淘宝造物节h5 源码 编辑:程序博客网 时间:2024/06/16 21:20

这段时间在学习socket网络编程,简单记录一下:

//server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#define MAXLINE 4096int main(int argc, char** argv){    int listenfd, connfd;    struct sockaddr_in servaddr;    struct sockaddr_in clientaddr;    socklen_t cliaddrlen;    char buff[4096];    int n;    pid_t pid;    if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)    {        printf("Create socket error: %s(errno: %d)\n", strerror(errno),errno);        exit(0);    }    memset(&servaddr, 0, sizeof(servaddr));    servaddr.sin_family = AF_INET;    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);    servaddr.sin_port = htons(8888);    if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1)    {        printf("Bind socket error: %s(errno: %d)\n", strerror(errno), errno);        exit(0);    }    if(listen(listenfd, 10) == -1)    {        printf("Listen socket error: %s(errno: %d)\n", strerror(errno), errno);        exit(0);    }    printf("=====Waiting for connection=====\n");    for(;;)    {        cliaddrlen = sizeof(clientaddr);        connfd = accept(listenfd, (struct sockaddr*)&clientaddr, &cliaddrlen);        char ipstring[16];        if((pid = fork()) == 0)        {            close(listenfd);            if(connfd == -1)            {                printf("Accept socket error: %s(errno: %d)\n", strerror(errno), errno);                continue;            }            inet_ntop(AF_INET, &clientaddr.sin_addr, ipstring, (socklen_t)sizeof(ipstring));            char hello[40] = {"hello "};            strcat(hello, ipstring);            strcat(hello, ", you are connecting...\0");            if(send(connfd, hello, sizeof(hello), 0) < 0)            {                printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);                exit(0);            }            while(n = recv(connfd, buff, MAXLINE, 0))            {                buff[n] = '\0';                printf("recv msg from client(%s): %s", ipstring, buff);            //  fflush(stdout);            }            close(connfd);            exit(0);        }    }    close(connfd);    close(listenfd);    exit(0);}


//client.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#define MAXLINE 4096int main(int argc, char** argv){    int sockfd, n;    char recvline[4096], sendline[4096];    struct sockaddr_in servaddr;    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)    {        printf("Create socket error: %s(errno: %d)\n", strerror(errno),errno);        exit(0);    }    memset(&servaddr, 0, sizeof(servaddr));    servaddr.sin_family = AF_INET;    servaddr.sin_port = htons(8888);    if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)    {        printf("iner_pton error for %s\n", argv[1]);        exit(0);    }    if(connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)    {        printf("connect error: %s(errno: %d)\n",strerror(errno),errno);        exit(0);    }    //  n = recv(sockfd, recvline, 4096, 0);    //  recvline[n] = '\0';    //  printf("%s", recvline);    n = recv(sockfd, recvline, MAXLINE, 0);    recvline[n] = '\0';    printf("%s\n", recvline);//  fflush(stdout);do    {printf("send msg to server:\n");        fgets(sendline, 4096, stdin);        if(send(sockfd, sendline, sizeof(sendline),0) < 0)        {            printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);            exit(0);        }    }while(sendline);    close(sockfd);    exit(0);}


0 0
原创粉丝点击