Linux Socket网络通信示例

记录一下Linux 网络通信编程示例,主要用内网穿透和网络调试助手进行调试。

1、源文件:

#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <netinet/in.h>
#incldue <string.h>           //bzero 
#include <arpa/inet.h>        //inet_addr

#define MSG printf

int main()
{
    int recbytes;
    int sin_size;
    char buffer[1024] = {0};
    struct sockaddr_in s_add,c_add;
    
    MSG("INFO: socket thread...\r\n");
    
    sock_id = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sock_id){
        MSG("INFO: socket fail !\r\n");
        return -1;
    }

    MSG("INFO: socket success !\r\n");

    bzero(&s_add,sizeof(struct sockaddr_in));
    s_add.sin_family = AF_INET;
    s_add.sin_addr.s_addr = inet_addr("94.191.70.63");
    //上述IP地址是我的服务器IP,可以用花生壳,NAT123等内网穿透软件
    s_add.sin_port = htons(18677);
    //设置的服务器端口

    //connect to serv with block mode
    if(-1 == connect(sock_id,(struct sockaddr*)(&s_add),sizeof(struct sockaddr)))
    {
        MSG("INFO: connect to serv fail !\r\n");
        return -1;
    }

    MSG("INFO: connect to serv success \r\n");

    while (1) {
        if(-1 != (recbytes = read(sock_id,buffer,1024))){
            buffer[recbytes] = '\0';
            MSG("INFO:Rx serv data:%s\r\n",buffer);
            memset(buffer,0,1024);
        }
        if(fgets( buffer, 1024, stdin ) != NULL){
            write( sock_id, buffer, strlen(buffer));
        }
    }
}

2、编译运行

gcc socket_linux.c -o main

服务器接收和发送:

linux发送和接收:

3、内网穿透是怎么一回事?

linux编写的socket网络通信程序需要访问IP和端口,这个IP和端口一定是公网、外网,不是局域网的192.168.1.X这种,因此在调试网络通信代码,测试数据发送时需要有公网IP作为服务器,接收我们程序发起的连接。

简单来说有两种方式构建服务器,1:购买阿里云、腾讯云、华为云等服务器,自己开服务,开端口和防火墙设置,并运行相应服务器代码,接收开发的socket连接并执行相应响应。2:内网穿透,不用搭建服务器,自己电脑安装一个内网穿透软件,由该软件提供一个外部公网IP,然后自己电脑再创建一个服务器,用普通的网络调试软件即可。

内网穿透怎么配置:首先在电脑打开网络调试助手,创建一个服务器,设置服务器端口为PORT1;接着打开内网穿透软件,创建一个公网服务(具有公网网址和公网端口PORT2),并绑定电脑的IP地址(用ADDR1表示,可以上网的地址)和PORT1端口;然后将内网穿透软件的外网服务网址找出来,转换成IP地址(用ADDR2表示);最后在程序中用ADDR2和PORT2这个IP和端口来对接,所有收发数据都可以传输到电脑的网络调试助手中。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值