• Linux主机连接腾讯云服务器


    Linux主机连接云服务器

    硬件条件

    当然你要先有一个云服务器,腾讯云比阿里云便宜一点,所以就用腾讯云了

    请添加图片描述

    问了师兄买这个98的就行,选择CentOS,不要选Ubuntu,因为

    请添加图片描述

    嗯,大概就是这样

    编程测试

    云服务器当然是作为服务端

    server.cpp

    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    
    int main(int argc, char *argv[])
    {
      if (argc != 2)
      {
        printf("Using:./server port\nExample:./server 5005\n\n");
        return -1;
      }
    
      int listenfd;
      if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
      {
        perror("socket");
        return -1;
      }
    
      struct sockaddr_in servaddr;
      memset(&servaddr, 0, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
      servaddr.sin_port = htons(atoi(argv[1]));
      if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0)
      {
        perror("bind");
        close(listenfd);
        return -1;
      }
    
      if (listen(listenfd, 5) != 0)
      {
        perror("listen");
        close(listenfd);
        return -1;
      }
    
      int clientfd;
      int socklen = sizeof(struct sockaddr_in);
      struct sockaddr_in clientaddr;
      clientfd = accept(listenfd, (struct sockaddr *)&clientaddr, (socklen_t *)&socklen);
      printf("客户端%s已连接\n", inet_ntoa(clientaddr.sin_addr));
    
      char buffer[1024];
      while (true)
      {
        int iret;
        memset(buffer, 0, sizeof(buffer));
        if ((iret = recv(clientfd, buffer, sizeof(buffer), 0)) <= 0)
        {
          printf("iret=%d\n", iret);
          break;
        }
        printf("receive text:%s\n", buffer);
    
        strcpy(buffer, "ok");
        if ((iret = send(clientfd, buffer, strlen(buffer), 0)) <= 0)
        {
          perror("send");
          break;
        }
        printf("send text:%s\n", buffer);
      }
    
      close(listenfd);
      close(clientfd);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    在自己的Linux上写客户端代码

    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    
    int main(int argc, char *argv[])
    {
      if (argc != 3)
      {
        printf("Using:./client ip port\nExample:./client 127.0.0.1 5005\n\n");
        return -1;
      }
    
      int sockfd;
      if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
      {
        perror("socket");
        return -1;
      }
    
      struct hostent *h;
      if ((h = gethostbyname(argv[1])) == 0)
      {
        printf("gethostbyname failed.\n");
        close(sockfd);
        return -1;
      }
      struct sockaddr_in servaddr;
      memset(&servaddr, 0, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_port = htons(atoi(argv[2]));
      memcpy(&servaddr.sin_addr, h->h_addr, h->h_length);
      if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0)
      {
        perror("connect");
        close(sockfd);
        return -1;
      }
    
      char buffer[1024];
      for (int i = 0; i < 3; i++)
      {
        int iret;
        memset(buffer, 0, sizeof(buffer));
        sprintf(buffer, "I am Monster number %d",i + 1);
        if ((iret = send(sockfd, buffer, strlen(buffer), 0)) <= 0)
        {
          perror("send");
          break;
        }
        printf("send text:%s\n", buffer);
    
        memset(buffer, 0, sizeof(buffer));
        if ((iret = recv(sockfd, buffer, sizeof(buffer), 0)) <= 0) 
        {
          printf("iret=%d\n", iret);
          break;
        }
        printf("receive text:%s\n", buffer);
      }
    
      close(sockfd);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    云服务器配置

    请添加图片描述

    要在防火墙这里自定义出用于通信的端口

    测试

    在云服务器运行服务程序

    [lighthouse@VM-4-11-centos bin]$ ./server 6666
    客户端114.213.236.99已连接
    receive text:I am Monster number 1
    send text:ok
    receive text:I am Monster number 2
    send text:ok
    receive text:I am Monster number 3
    send text:ok
    iret=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在Linux运行客户程序

    redwall@redwall-G3-3500:~/Test/socket_test/bin$ ./client 1.116.137.21 6666
    send text:I am Monster number 1
    receive text:ok
    send text:I am Monster number 2
    receive text:ok
    send text:I am Monster number 3
    receive text:ok
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意客户端连接的是服务端的公网IP

    请添加图片描述

  • 相关阅读:
    分布式文件存储——文件秒传
    Linux下C++使用Protobuf的安装步骤(vscode)
    JVM调优介绍
    L1-030 一帮一(Java语言)-天梯赛
    MapStruct代码生成器使用
    GDB使用技巧和相关插件
    Docker 网络
    Ansible概述以及模块
    【python】读取.dat格式文件
    工业数字化与新一代数字化系统设计平台----讲座
  • 原文地址:https://blog.csdn.net/qq_34935373/article/details/125528498