当前位置:首页 > 软件开发 > 正文

c语言的socket编程例子,c++网络编程

c语言的socket编程例子,c++网络编程

其实c语言的socket编程例子的问题并不复杂,但是又很多的朋友都不太了解c++网络编程,因此呢,今天小编就来为大家分享c语言的socket编程例子的一些知识,希望可以...

其实c语言的socket编程例子的问题并不复杂,但是又很多的朋友都不太了解c++网络编程,因此呢,今天小编就来为大家分享c语言的socket编程例子的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

socket编程能用汇编语言实现吗

完全可以实现

20年前的世纪初,就有人用汇编语言写了一个完整的GPS车辆监控产品,用的一个双串口22.1184Mhz主频32KFLASH的8031cpu+32KRAM+西门子GPRS模块+GPS模块,两个物理串口一个接GPRS模块一个接GPS模块,另外还用软件模拟出一个串口接车载电话手柄,GPRS模块的物理串口用西门子的协议复合出两个逻辑串口,一个发射接收AT指令通道做控制比如上网以后还能打电话,一个做GPRS数据通道

拨号接通以后做数据通道。

那个时候的通信模块不像现在,根本没有TCPIP协议栈

,只有PPP协议拨号上网,TCPIP协议只能在外面做,比如接到电脑串口做上网猫

,用汇编从PPP协议写起,剥开数据包第二层是IP协议,然后是TCP/UDP协议,完全对着RFC文件写,做了一个完整的TCP/IP协议栈,可以与设定的IP地址进行TCP、UDP通信。

除了正常的通信,还做了容错处理,设备可以冒烟可以着火但是绝对不会死机,比尔盖茨会蓝屏我们不会,设备有故障断电重启一定故障依旧绝对不会一重启就恢复正常了。有些设备到现在还在正常工作。

除了底层的通信处理,还做了一整套GPS数据解析

、位置管理、速度管理、电子围栏管理、路线管理、油量管理、各种报警处理、硬件看门狗/冷启动管理

等等等等。

用汇编写了一个实时多任务操作系统

,包括GPS定位、车辆信息管理

、可靠性管理等等,整个工程花了5个月不吃不喝做出第一版,汇编代码2万多行,完成后用管脚输出脉冲在示波器上看CPU占用率,最忙的时候不到5%,平时都一闪而过几乎测不出,所有操作都是实时的非常流畅。

那是2001年的事,当时的实际情况ARM刚刚出来,一个最小系统CPU+FLASH+SDRAM最少要300元起,TCP/IP协议栈只有BSD还不知道哪里有的卖,这之前行业都是用SMS短信做通信,GPRS刚刚出来大家都想搞网络,但是面对硬件、软件门槛都是望而却步,结果就是产品的价格一直居高不下,出厂价格4800,我们的产品上市直接1400,不到半年降到800,台湾、日本、美国欧洲的同行带着8000、10000的产品兴冲冲来中国,一看中国人是这么干的转身就走直接放弃,一直到现在整个行业都不曾有过国外产品这一说。

8年以后我的同时用MTK的RTOS重写系统,ARMCPU时钟114M,动不动就卡住停顿半天。

异步socket是什么意思

socket的同步和异步,主要是指处理服务端处理socket的模式,接收消息和处理消息的同步和异步。

同步的socket,服务端在接收到一个socket请求之后,必须处理完并返回给客户端之后,才处理下一个socket请求。

异步的socket,服务端在收到一个socket请求之后,将该socket请求交给其他线程处理,然后继续接收下一个socket请求。并不需要等上一个socket请求处理完才接收下一个。

一般现在都是异步socket,同步socket只用于telnet等单实例的服务端,很少见了。

C/C++ 有哪些适合快速开发的socket服务器框架

如果有C++背景可以考虑用Thrift,这个需要服务器和客户端一起使用。

如果只考虑服务器,Go和NodeJS都是不错的选择,看看官方的例子就已经比较清楚了。至于socket连接的稳定性,主要还是在于TCP心跳检测和数据重传做的好不好,对于信道不好的情况,比如使用3G卡做联网时,要每隔几十秒就发一个没有数据的心跳包,保证尽早检测到断线请求,尽早重连。服务器端性能应该问题不大,就算设备每秒钟都发数据只要业务不太复杂就不会遇到什么瓶颈。

UDP和TCP的socket一般分别用在什么地方

Socket是网络通讯经常采用的一种方式,它不是一个具体的物件也不是想http类的通讯协议。你可以把它看成是一组基于TCP和UDP通信协议的接口,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

Socket基本概念

在了解Socket之前你需要对计算机通讯的分层有个大概的了解,具体讲解我在这里就不讲了,放一张很好的图分享给大家:

上面图详细讲了基本整个计算机通信的分层架构,很多我也不了解没我们只看我们关心的TCP/IP,其分层简化图示如下:

理解Socket

好,了解了基本分层机构后,我们现在来形象的理解一下Socket到底是什么。我这里有一个很形象的实例可以帮助我们很好的理解Socket,这也是我当初在学习Socket编程时自己领悟出来的,那就是物流。

我们要传送的数据就是物流中的货物,ip就是发货人和收货人的联系方式,那么Socket是什么?大家想想这送货这这一流程还缺少啥?对呀,物流公司啊,对吧!物流公司就是那个Socket,他负责帮你处理送货的琐碎事情,比如你的货物该怎么打包、该怎么防止易碎物品破碎、该用什么方式运输、等等,如果是境外货物还牵涉到报关等等一系列复杂琐碎的事情,这些物流公司(Socket)帮你处理好了。示意图如下:

理解TCP与UDP的区别以及三次握手和四次挥手

然后我们来说一下TCP和UDP的区别。前面讲到Socket就相当于是物流公司,那么TCP协议就相当于是:假设你是寄货方,你要寄给你朋友一份礼物,你首先得去物流公司去寄,这样你再物流公司就相当于建立了一个事物(Socket实例)。然后物流公司有两种服务方式让你选择(TCP和UDP)。

先说TCP,TCP这个协议它比较保守,物流公司说我必须确保你朋友会接收这份礼物,不然它不送。于是物流公司就回去联系你朋友。然后联系内容大致如下:

物流:你好,我这里有个你朋友寄的礼物要给你,你收吗?

你朋友:OK,收,什么时候发,多久到?

物流:现在就发,大概要12小时到。

然后物流才开始发货,并且会给你们一个物流单号,这个单号就是关于这份货物你和你朋友的发货收货凭证。这就是所谓的三次握手。示意图:

物流发送完后还会联系你朋友,大致对话内容:

物流:你好,货物已发送,请注意查收

你朋友:好的。

货物送到,你朋友:OK,货物收到,你们可以结案

物流:好的,我结案了。

这就是所谓的四次挥手(拜拜);

(注释:三次握手四次挥手这都是Socket在你建立的时候根据你选择的协议确定好的)

这样是不是很麻烦,估计也就顺丰有这服务了,其他大部分公司还是没有这么贴心的服务的,他们可能就是UDP协议方式了。

UDP比较简单,当你用物流(Socket)寄货物的时候物流公司并不会管你朋友是否能联系上,是否愿意接收,它只负责将你的货物发出去就完事。这中间是不需要通知你朋友的,你和你朋友也不需要有连接,这就是所谓的无连接。

两种协议区别和应用

UDP常用于一次性传输比较少量数据的网络应用中,UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等),显然,可靠数据传输对于这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不能容忍的,我们最熟悉的视频通话大部分就是用的UDP协议。

TCP面向连接,即发送数据之前需要建立连接,并且TCP是拥有拥塞机制的,当前部分数据还没有被接收完,后部分的数据会被阻塞知道前部分数据传递OK后才会继续传递后半部分,所以通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;在数据完整性、安全性要求较高的场景需要使用TCP协议,比如你传送重要办公文件、图片等,这些东西丢包都是会影响数据品质的。

文章到此结束,如果本次分享的c语言的socket编程例子和c++网络编程的问题解决了您的问题,那么我们由衷的感到高兴!

最新文章