client和server简单基础版之创建套接字完成通信

TCP建立套接字链接通信,知识点学习如下链接:https://www.cnblogs.com/zhanggaofeng/p/5869053.html

  1. 客户端代码
    #include<sys/socket.h>
    #include<arpa/inet.h>
    #include<stdio.h>
    #include<string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <errno.h>
    
    int main(int argc,char *argv[])
    {
       //声明套接字和套接字地址结构
       int sockfd; 
       struct sockaddr_in addr;
      if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1){
        printf("socket error!");
       }
       bzero(&addr, sizeof(addr));
       addr.sin_family=AF_INET;
       addr.sin_port=htons(8080);
       addr.sin_addr.s_addr=inet_addr("127.0.0.1");
       if(connect(sockfd, (struct sockaddr*)&addr, sizeof(addr))==-1)
       {
         printf("connect failed ! error message :%s\n",strerror(errno));
       } 
       else printf("success");
       close(sockfd);
       return 0;
    }

    2

  2. 服务器端代码

    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <errno.h>
    #include <arpa/inet.h>
    #define PORT 8080   //端口号
    #define BACKLOG 10   //所允许的连接数量
    using namespace std;
    int main()
    {
        int socketfd,connectfd;  //描述符
        struct sockaddr_in server;  //服务器地址
        struct sockaddr_in client;  //客户地址
        socketfd=socket(AF_INET, SOCK_STREAM, 0);
        if(socketfd==-1)
        {
            printf("socket  failed\n");
            close(socketfd);
            return 0;
        }
        bzero(&server, sizeof(server)); //初始化
        server.sin_family=AF_INET;      //tcp套接字
        server.sin_port=htons(PORT);    //将端口转换为网络字序
        server.sin_addr.s_addr=htonl(INADDR_ANY);   //内核选择ip
        if(bind(socketfd, (struct sockaddr *)&server,sizeof(server))==-1)  //将套接字绑定到指定的协议地址
        {
    
            printf("Bind error\n");
            close(socketfd);
            return 0;
    
        }
        if(listen(socketfd, BACKLOG)==-1)  //监听 (如果没有请求,则被阻塞,进入休眠状态)
        {
            printf("listen error\n");
            close(socketfd);
            return 0;
        }
        socklen_t sin_size=sizeof(struct sockaddr_in);
        if ((connectfd=accept(socketfd, (struct sockaddr *)&client,&sin_size))==-1)  //接收请求
        {
    
            printf("connect failed ! error message :%s\n",strerror(errno));
            close(socketfd);
            return 0;
    
        }
        printf("you got a connection form %s\n",inet_ntoa(client.sin_addr));
        send(connectfd, "hello\n", 10, 0); //发送信息
        close(connectfd);
        close(socketfd);
    
        return 0;
    
    }
    
    

    在程序测试中曾遇到“connect failed ! error message :Socket operation on non-socket”错误,经百度调试发现是由于在客户端建立socket时“   if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1)   ”少写了一个括号。加上程序就运行正确了。第一篇博客,加油!

猜你喜欢

转载自blog.csdn.net/qq_28809935/article/details/84037220