socket连接腾讯云服务器

遇到的问题

       客户端连接Connection refused

       解决方案

        1.先在本地测试ser和client,保证程序可以正常连接

        2.查看服务器的防火墙是否关闭

                命令

                        firewall-cmd --state

                        systemctl stop firewalld.service   //关闭防火墙

                        

        3.查看对应的服务器程序是否在监听

                        netstat -an|grep  端口号

                        

        4.服务器需要放开对应的端口

                

        5.服务器绑定内网IP,客户端绑定公网IP

                ifconfig //查看服务器的内网IP地址

        6.ping 公网IP测试

 

      

注意事项

        服务器要设置为内网IP,客户端要设置为公网IP

服务端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <arpa/inet.h>

int main(int argc, char *argv[]) {
    int socket_desc, client_sock, c;
    struct sockaddr_in server, client;
    char client_message[2000];

    // 创建socket
    socket_desc = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_desc == -1) {
        printf("Could not create socket");
    }

    // 设置服务器地址和端口
    
    server.sin_family = AF_INET;

    //这里要设置为服务器内网的IP地址
   server.sin_addr.s_addr = inet_addr("8.8.8.8");
   
    server.sin_port = htons(9999);
    int on = 1;
    setsockopt(socket_desc,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
    // 绑定socket到指定地址和端口
    if (bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0) {
        perror("bind failed. Error");
        return 1;
    }

    // 监听连接
    listen(socket_desc, 3);

    printf("Waiting for incoming connections...\n");
    c = sizeof(struct sockaddr_in);

    // 接受连接
    client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t *)&c);
    if (client_sock < 0) {
        perror("accept failed");
        return 1;
    }

    printf("Connection accepted\n");

    // 接收客户端消息
    if (recv(client_sock, client_message, 2000, 0) < 0) {
        printf("recv failed");
    }
    printf("Client message: %s\n", client_message);

    // 发送响应给客户端
    char *server_message = "Hello from server";
    if (send(client_sock, server_message, strlen(server_message), 0) < 0) {
        printf("Send failed");
        return 1;
    }

    // 关闭连接
    close(client_sock);
    close(socket_desc);

    return 0;
}

客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int sock;
    struct sockaddr_in server;
    char message[1000], server_reply[2000];

    // 创建socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        printf("Could not create socket");
    }

    // 设置服务器地址和端口

    //注意这里需要设置服务器的公网IP地址
    server.sin_addr.s_addr = inet_addr("8.8.8.8");


    server.sin_family = AF_INET;
    server.sin_port = htons(9999);

    // 连接服务器
    if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
        perror("connect failed. Error");
        return 1;
    }

    printf("Connected\n");

    // 发送数据
    strcpy(message, "Hello from client");
    if (send(sock, message, strlen(message), 0) < 0) {
        printf("Send failed");
        return 1;
    }

    // 接收服务器响应
    if (recv(sock, server_reply, 2000, 0) < 0) {
        printf("recv failed");
        return 1;
    }

    printf("Server reply: %s\n", server_reply);

    // 关闭socket
    close(sock);

    return 0;
}

运行结果:

       

                

参考链接:

https://blog.csdn.net/nia305/article/details/79018352?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-79018352-blog-86557676.235%5Ev40%5Epc_relevant_anti_vip_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-79018352-blog-86557676.235%5Ev40%5Epc_relevant_anti_vip_base&utm_relevant_index=2

【网络】连接服务器失败(错误原因:Connection refused)| error 111: (111) Connection refused 原因分析-CSDN博客

  • 24
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值