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);
    }
  • 相关阅读:
    js中不同的height, top的对比
    正则表达式入门以及记录
    CSS小记(持续更新......)
    Git远程操作
    Git Push 避免用户名和密码方法
    Git本地操作
    CSS3动画属性
    c语言文法
    实验一、词法分析器实验
    词法分析器
  • 原文地址:https://www.cnblogs.com/CoderTian/p/4200749.html
Copyright © 2011-2022 走看看