记录一下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 printfint 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 modeif(-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和端口来对接,所有收发数据都可以传输到电脑的网络调试助手中。

Linux Socket网络通信示例相关推荐

  1. socket 网络通信 ( windows + Linux )

    参考:C++ socket 网络通信等 socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",都可以用"打开open –> 读写writ ...

  2. Python Socket 网络通信详解

    Python 模块 Socket 网络通信 文章目录 Python 模块 Socket 网络通信 1. socket介绍 2. Socket 类型 3. Socket 函数 3.1 服务器端 Sock ...

  3. Linux Socket基础介绍

    Linux Socket函数库是从Berkeley大学开发的BSD UNIX系统中移植过来的.BSD Socket接口是众多Unix系统中被广泛支持的TCP/IP通信接口,Linux下的Socket程 ...

  4. python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系

    python socket编程 by SA19225409 地址协议家族 Python 支持 AF_UNIX. AF_NETLINK. AF_TIPC 和 AF_INET 家族 AF_UNIX 基于本 ...

  5. Linux下的示例程序

    linux下的示例程序 #if 0 /*  * 1. 遍历目录-1  */ #include <stdio.h> #include <dirent.h> #include &l ...

  6. 妈咪,我找到了!15个实用的Linux find命令示例

    原文出处: thegeekstuff   译文出处: oschina-青崖白鹿 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将 ...

  7. api有哪些 javasocket_简单hello/hi程序、分析及Java Socket API与Linux Socket API对比

    1.Socket 定义 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应 ...

  8. Linux socket聊天室

    目录 一.运行效果 1.分别编译客户端和服务端代码 2.运行 3.使用效果 二.代码 chat.h 服务端代码 客户端代码 一.运行效果 1.分别编译客户端和服务端代码 gcc client.c -o ...

  9. Linux - Socket网络套接字

    OSI七层协议功能 物理层 面向物理传输媒体,屏蔽媒体的不同 主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进 ...

最新文章

  1. m函数与m文件的命名
  2. 巴菲特:人生赢家,都是稳中求生,稳中求胜
  3. 基于Linux的虚拟主机搭建
  4. jmc线程转储_查找线程转储中的异常和错误
  5. 【python零基础入门学习】Python入门,带你快速学习Python 基础语法
  6. 二维数组的遍历之查漏补缺
  7. [PYTHON] 深度解析copy.copy() 与 copy.deepcopy()
  8. vb6 word 2002 合并单元格_干货来了!最实用的Word表格小技巧!
  9. HDU 5726 GCD
  10. Python3 AES加解密(AES/ECB/PKCS5Padding)
  11. javq接口_java中什么是接口?接口的作用是什么?
  12. 本易计算机不开机了,本易M3V(云游戏版)平板电脑刷机详细过程
  13. 计算机驱动器程序,打开计算机CD驱动器的位置
  14. Qt图形视图框架:QGraphicsView 详解
  15. matlab多项式的求值,多项式求值的MATLAB实现
  16. 通过运营界面上传图片失败,浏览器提示上传文件时发生HTTP错误(错误代码:500)
  17. Pycharm 报错 Environment location directory is not empty 解决
  18. uniapp 小于1000 按原数字显示 超过1000 数字换算成10w+ 1.3k+ 显示
  19. Spring声明式事务配置管理方法
  20. 2022 春节抖音视频红包系统设计与实现

热门文章

  1. 在HTML中插入JavaScript代码的方式
  2. mysql集群多管理节点_项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
  3. json_decode php数组,json_decode转化为数组加true,json_encode和json_decode区别
  4. mysql增数据语句_Mysql 数据增删改查语句
  5. java中reject方法作用_Java BindingResult.rejectValue方法代碼示例
  6. Mac OS X下查看CPU信息
  7. 读入源文件,并在每行前加上行号和[Tab]
  8. uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权
  9. js冒泡排序,简单的冒泡排序
  10. 前端学习(3167):react-hello-react之鼠标移入效果