zoukankan      html  css  js  c++  java
  • Linux TCP通信例子

    TCP通信的C/S模型

    ///server.c
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <unistd.h>
    #include <netinet/in.h>
    #define PORT 4321
    #define BUFFER_SIZE 1024
    #define MAX 5
    #include <pthread.h>
    int main()
    {
        
        struct sockaddr_in servaddr;
        int sockfd,client_fd;
        char buf[BUFFER_SIZE];
    
    /*建立socket连接*/
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
        {
            perror("socket");
            exit(1);
        }
    
        printf("socket id=%d
    ",sockfd);
    /*设置sockaddr_in结构体中相关参数*/
        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_port=htons(PORT);
        servaddr.sin_addr.s_addr=INADDR_ANY;
        int i=1;  /*允许重复使用本地址与套接字进行绑定*/
        setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
    /*绑定函数bind()*/
    
        if(bind(sockfd,(struct sockaddr *) &servaddr,sizeof(servaddr))==-1)
        {
            perror("bind");
            exit(1);
        }
    
        printf("Bind success!
    ");
    /*调用listen函数,创建未处理请求的队列*/
        if(listen(sockfd,MAX)==-1)
        {
            perror("listen");
            exit(1);
        }
    
        printf("Listen...
    ");
    
    /*调用accept函数,等待客户端连接*/
        if((client_fd=accept(sockfd,NULL,NULL))==-1)
        {
            perror("accept");
            exit(0);
        }
    /*调用recv()函数接收客户端的请求*/
        memset(buf,0,sizeof(buf));
        
        if(recv(client_fd,buf,BUFFER_SIZE,0)==-1)
        {
            perror("recv");
            exit(0);
        }
    
        printf("Received a message:%s
    ",buf);
        close(sockfd);
        exit(0);
    }
    ///client.c
    /*
    TCP通讯的client端;
    
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<arpa/inet.h>
    #define BUFFER_SIZE 100
    
    
    int main(int argc,char *argv[])
    {
        int sockfd,client_fd;
        char buf[BUFFER_SIZE];
        struct sockaddr_in servaddr;
    
        if(argc<3)
        {
            printf("USAGE=%s <serv_in> <serv_port>
    ",argv[0]);
            exit(-1);
        }
    
       // memset(buf,0,sizeof(buf));
    
    /*创建socket*/
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
        {
            perror("socket");
            exit(-1);
        }
        
    
    /*创建sockaddr_in结构体中相关参数*/
        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_port=htons(atoi(argv[2]));
        servaddr.sin_addr.s_addr= inet_addr(argv[1]);
    /*调用connect函数主动发起对服务端的链接*/
    
        if(connect(sockfd,(struct sockaddr *) &servaddr,sizeof(servaddr))==-1)
        {
            perror("connect");
            exit(-1);
        }
    /*发送消息给服务端*/
    while(1)
    {
        scanf("%s",buf);
        if(send(sockfd,buf,strlen(buf),0)==-1)
        {
            perror("send");
            exit(-1);
        }
        memset(buf,0,sizeof(buf));
        
        if(recv(client_fd,buf,BUFFER_SIZE,0)==-1)
        {
            perror("recv");
            exit(0);
        }
    
        printf("Received a message:%s
    ",buf);
    }
        close(sockfd);
        exit(0);
    }
  • 相关阅读:
    nginx 状态码整理
    nginx 添加perl
    Nginx 内置全局变量
    数组模板实现(新手遇到的格式问题)
    malloc的使用注意事项
    使用memset的注意事项!!!
    2019/3/31acm周三(三人)/CodeForces
    2019/3/31acm周三(三人)/LightOJ
    2019/3/31acm周三(三人)/hdu1042/高精度计算(未懂!)
    2019/3/24周赛坑题(读题)HDU 1412
  • 原文地址:https://www.cnblogs.com/CoderTian/p/4200749.html
Copyright © 2011-2022 走看看