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 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网络通信示例相关推荐
- socket 网络通信 ( windows + Linux )
参考:C++ socket 网络通信等 socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",都可以用"打开open –> 读写writ ...
- Python Socket 网络通信详解
Python 模块 Socket 网络通信 文章目录 Python 模块 Socket 网络通信 1. socket介绍 2. Socket 类型 3. Socket 函数 3.1 服务器端 Sock ...
- Linux Socket基础介绍
Linux Socket函数库是从Berkeley大学开发的BSD UNIX系统中移植过来的.BSD Socket接口是众多Unix系统中被广泛支持的TCP/IP通信接口,Linux下的Socket程 ...
- 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 基于本 ...
- Linux下的示例程序
linux下的示例程序 #if 0 /* * 1. 遍历目录-1 */ #include <stdio.h> #include <dirent.h> #include &l ...
- 妈咪,我找到了!15个实用的Linux find命令示例
原文出处: thegeekstuff 译文出处: oschina-青崖白鹿 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将 ...
- api有哪些 javasocket_简单hello/hi程序、分析及Java Socket API与Linux Socket API对比
1.Socket 定义 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应 ...
- Linux socket聊天室
目录 一.运行效果 1.分别编译客户端和服务端代码 2.运行 3.使用效果 二.代码 chat.h 服务端代码 客户端代码 一.运行效果 1.分别编译客户端和服务端代码 gcc client.c -o ...
- Linux - Socket网络套接字
OSI七层协议功能 物理层 面向物理传输媒体,屏蔽媒体的不同 主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进 ...
最新文章
- m函数与m文件的命名
- 巴菲特:人生赢家,都是稳中求生,稳中求胜
- 基于Linux的虚拟主机搭建
- jmc线程转储_查找线程转储中的异常和错误
- 【python零基础入门学习】Python入门,带你快速学习Python 基础语法
- 二维数组的遍历之查漏补缺
- [PYTHON] 深度解析copy.copy() 与 copy.deepcopy()
- vb6 word 2002 合并单元格_干货来了!最实用的Word表格小技巧!
- HDU 5726 GCD
- Python3 AES加解密(AES/ECB/PKCS5Padding)
- javq接口_java中什么是接口?接口的作用是什么?
- 本易计算机不开机了,本易M3V(云游戏版)平板电脑刷机详细过程
- 计算机驱动器程序,打开计算机CD驱动器的位置
- Qt图形视图框架:QGraphicsView 详解
- matlab多项式的求值,多项式求值的MATLAB实现
- 通过运营界面上传图片失败,浏览器提示上传文件时发生HTTP错误(错误代码:500)
- Pycharm 报错 Environment location directory is not empty 解决
- uniapp 小于1000 按原数字显示 超过1000 数字换算成10w+ 1.3k+ 显示
- Spring声明式事务配置管理方法
- 2022 春节抖音视频红包系统设计与实现
热门文章
- 在HTML中插入JavaScript代码的方式
- mysql集群多管理节点_项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
- json_decode php数组,json_decode转化为数组加true,json_encode和json_decode区别
- mysql增数据语句_Mysql 数据增删改查语句
- java中reject方法作用_Java BindingResult.rejectValue方法代碼示例
- Mac OS X下查看CPU信息
- 读入源文件,并在每行前加上行号和[Tab]
- uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权
- js冒泡排序,简单的冒泡排序
- 前端学习(3167):react-hello-react之鼠标移入效果