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);
    }
  • 相关阅读:
    WinRAR v5.90中文正式32&64位整合安装版
    WIN10永久激活工具 HWIDGEN
    Adobe2020套装激活工具
    keka 1.1.26-压缩工具
    python文件和目录操作方法大全(含实例)
    如何使公网能够访问本地web服务器?
    网线那根正极那根负极
    HPUX 大文件系统扩容
    LESS详解之函数(四)
    Win7 安装Apache 2.2.4报错:<OS 5>拒绝访问. :Failed to open the WinNT service manager
  • 原文地址:https://www.cnblogs.com/CoderTian/p/4200749.html
Copyright © 2011-2022 走看看