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

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] 需要把keys设置为全局唯一吗?

[react] 需要把keys设置为全局唯一吗&#xff1f; 不需要,key是用来进行diff算法的时候进行同层比较,准备的说key只需要在兄弟节点之间唯一,一般情况key选取是后端定义的id.万不得已的时候可以选择index(选择index是万不得已的选择,因为选择了index后,一些操作会改变index的值…

Windows Phone 实用开发技巧(3):输入框自动聚焦并打开SIP

大家看到这个标题&#xff0c;可以会问什么是SIP&#xff08;看过我Windows Phone 7 Tips系列的童鞋应该知道&#xff09;&#xff0c;SIP全称为Soft Input Panel&#xff0c;即触摸屏中的输入键盘。在Windows Phone 应用程序中&#xff0c;可能会碰到这样的情况&#xff0c;即…

shell除法计算

From: http://5iwww.blog.51cto.com/856039/270119 shell计算中使用除法&#xff0c;基本默认上都是整除。比如&#xff1a;num12num23num3expr $num1 / $num2这个时候num30 ,是因为是因为expr不支持浮点除法解决的方法&#xff1a;num3echo "sclae2; $num1/$num2" …

stm32+lwip(四):网页服务器测试

ST官方有lwip的例程&#xff0c;下载地址如下&#xff1a; https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32070.html 本文例子参考ST官方给出的例…

[react] 你有使用过suspense组件吗?它帮我们解决了什么问题?

[react] 你有使用过suspense组件吗&#xff1f;它帮我们解决了什么问题&#xff1f; 动态加载(异步组件)加载时候会有延迟,在这延迟期间可以将一些内容展示给用户,比如loading 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定…

HDOJ 2046 骨牌铺方格 【递推】

HDOJ 2046 骨牌铺方格 【递推】 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid2046 铺2*1只有一种情况&#xff08;一竖&#xff09; 2*2有两种情况&#xff08;两横或两竖&#xff09; 2*n (n≥3)时 可以先铺1块竖着&#xff0c;再铺n-1块 还有先铺2块横着&#x…

cygwin清屏

From: http://www.cclove.me/Enable_clear_command_on_cygwin.html 默认安装的cygwin的bash shell并没有clear命令&#xff0c;于是有些shell程序需要用到的时候就蛋疼了&#xff1a; Katherinecclove ~$ cls -bash: cls: command not foundKatherinecclove ~$ clear -bas…

Linux 用C/C++创建新文件并写入内容

1、需求 在Linux环境下用C编写一个函数&#xff0c;用于记录运行日志&#xff0c;要求只存在一个同名文件&#xff0c;每次记录前清除已有的信息。 2、思路 需要完成的是&#xff1a; &#xff08;1&#xff09;查找&#xff08;access&#xff09;是否该文件存在&#xff…

动态加载JS脚本【转】

原文&#xff1a;http://mario-design.iteye.com/blog/147810 要实现动态加载JS脚本有4种方法&#xff1a; 1、直接document.write <script language"javascript"> document.write("<script srctest.js><\/script>"); </script>…

如何将Eclipse中的开源项目使用到Android Studio中

近几日&#xff0c;笔者用到了一些开源项目&#xff0c;比如著名的PTR项目。但是在使用的过程中&#xff0c;遇到了一些问题。 这个开源库是在Eclipse上面写的&#xff0c;我们现在开发用的是Android stuido。 两种软件的项目结构是不同的&#xff0c;那么怎么把PTR用到我们的项…

EditPlus常用快捷键

From: http://katrina.blog.51cto.com/709863/144111 editplus占内存比较小&#xff0c;加载速度快&#xff0c;很强大。文本类&#xff1a;新建普通文本 CtrlN 新建普通的文本(经常建立一个新脚本平时很容易遇到)新建浏览器窗口 CtrlShiftB 新建浏览器…

[react] super()和super(props)有什么区别?

[react] super()和super(props)有什么区别&#xff1f; react 中的class 是基于es6的规范实现的, 继承是使用extends关键字实现继承的&#xff0c;子类必须在constructor()中调用super() 方法否则新建实例 就会报错&#xff0c;报错的原因是 子类是没有自己的this对象的&#…

VC实现表单提交并设置获取COOKIE:

可以尝试通过 HttpAddRequestHeaders 来添加自已的COOKIE: char * lpszHeaders "Cookie: Keysomevalue"; DWORD dwHeadersLength strlen(lpszHeaders); HttpAddRequestHeaders(hOpenRequest, lpszHeaders, dwHeadersLength, HTTP_ADDREQ_FLAG_A…

STM32 网络通信Web Server中 SSI与CGI的应用解析

本次主要解析STM32网络通信中WebServer应用&#xff0c;从网页界面的编写到浏览器与STM32之间进行通信的数据来说明SSI与CGI的原理及应用&#xff0c;并对GET与POST指令进行应用解析。 硬件和软件环境&#xff1a; 1.硬件环境&#xff1a;STM32F407&#xff0c;网卡芯片LAN87…

ggg

ggg转载于:https://www.cnblogs.com/britphy/p/4744739.html

树莓派SSH 连接不上:socket error Event:32 Error:10053

问题如下&#xff1a; 解决办法&#xff1a;ssh文件夹下的文件权限问题。 cd /etc/ssh sudo chmod 0644 * sudo chmod 0600 ssh_host_ecdsa_key ssh_host_rsa_key登陆成功&#xff1a;

嵌入式设备web服务器比较

现在在嵌入式设备中所使用的web服务器主要有&#xff1a;boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。 Boa 1.介绍 Boa诞生于1991年&#xff0c;作者Paul Philips。是开源的&#xff0c;应用很广泛&#xff0c;特别适合于嵌入式设备&#xff0c…

UML造型——使用EA时序图工具的开发实践和经验

Enterprise Architect&#xff08;下面简称EA&#xff09;是一款基于OMG UML的可视化模型与设计工具。提供了对软件系统的设计和构建、业务流程建模和基于领域建模的支持&#xff0c;被企业和组织不仅应用于对系统的建模&#xff0c;还用于推进模型在整个应用程序开发周期中实现…

Qt QInputDialog文本输入对话框示例

1、代码如下 //引入头文件: #include <QInputDialog>//...//...//...//具体用法&#xff1a; bool isOK;//QInputDialog 是否成功得到输入 QString text QInputDialog::getText(NULL, "参数设定", "输入单次召测统计时间&#xff0c;eg.\"0:0:…

winform 与WPF

winform 与WPF 在多线程上的改进性能没大区别&#xff0c;WPF 是富客户端&#xff0c;winform是常见的客户端&#xff0c;就是说wpf实现一些绚丽界面比winform更容易&#xff0c;这就是他们的区别&#xff0c;当然wpf是微软取代winform的客户端技术&#xff0c;所以在一些数据绑…