socket编程详解(2-2) 回射客户/服务器模型

回射客户/服务器模型

 

举个栗子:

服务器端代码:

#include<stdio.h>
#include <sys/socket.h>
#include<sys/types.h>
#include<unistd.h>

#include <netinet/in.h>
#include <arpa/inet.h>

#include<stdlib.h>
#include<errno.h>
#include<string.h>

int main()
{
        int sockfd;
        if((sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0)
                printf("socket err");

        struct sockaddr_in servaddr;
        memset(&servaddr,0,sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(5188);
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

        if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0)
                printf("blind err");


        if (listen(sockfd,SOMAXCONN) < 0 )
                printf("listen err:");


        struct sockaddr_in peeraddr;
        socklen_t peerlen = sizeof(peeraddr);
        int conn;
        if ((conn = accept(sockfd,(struct sockaddr*)&peeraddr,&peerlen)) < 0 )
                printf("accept err");

        char recvbuf[1024];
        while(1)
        {

                memset(recvbuf,0,sizeof(recvbuf));
                int ret  = read(conn,recvbuf,sizeof(recvbuf));
                fputs(recvbuf,stdout);
                write(conn,recvbuf,ret);

        }

        close(conn);
        close(sockfd);

        return 0;

}

客户端代码:

#include<stdio.h>
#include <sys/socket.h>
#include<sys/types.h>
#include<unistd.h>

#include <netinet/in.h>
#include <arpa/inet.h>

#include<stdlib.h>
#include<errno.h>
#include<string.h>


int main()
{
        int sockfd;
        if((sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0)
                printf("socket err");

        struct sockaddr_in servaddr;
        memset(&servaddr,0,sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(5188);
        servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");


        if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) <0)
                printf("connect err");


        char sendbuf[1024]={0};
        char recvbuf[1024]={0};
        while(fgets(sendbuf,sizeof(sendbuf),stdin) != NULL)
        {
                write(sockfd,sendbuf,strlen(sendbuf));
                read(sockfd,recvbuf,sizeof(recvbuf));

                fputs(recvbuf,stdout);
                memset(sendbuf,0,sizeof(sendbuf));
                memset(recvbuf,0,sizeof(recvbuf));

        }

        close(sockfd);

        return 0;

}

客户端:

renzhuang@geroge:~/netcoding/07socket$ ./01sock_client
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   //输入
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   //回显

服务器端;

renzhuang@geroge:~/netcoding/07socket$ ./01sock_server
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   //显示

posted @ 2016-12-07 10:36  ren_zhg1992  阅读(123)  评论(0)    收藏  举报