c语言通信之网络通信
除了上一章说的串口通信,还有网络通信也是一种常见的通信方式。下面是一个基于TCP协议的网络通信的例子:
1.创建socket
在C语言中,可以使用socket()函数创建一个socket。该函数的第一个参数是协议族,第二个参数是socket类型。例如,要创建一个TCP socket,可以使用以下代码:
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
2.绑定地址
创建socket后,需要将其绑定到一个IP地址和端口号上。可以使用bind()函数来绑定地址。例如,要将socket绑定到本机的IP地址和端口号1234上,可以使用以下代码:
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(1234);
bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));
3.连接服务器
绑定地址后,需要连接到服务器。可以使用connect()函数连接到服务器。例如,要连接到服务器的IP地址和端口号,可以使用以下代码:
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("服务器IP地址");
servaddr.sin_port = htons(服务器端口号);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
4.读写数据
连接到服务器后,就可以进行数据通信了。可以使用read()函数从socket读取数据,使用write()函数向socket写入数据。例如,要从socket读取一个字节的数据,可以使用以下代码:
char buffer[1];
int n = read(sockfd, buffer, 1);
如果要向socket写入一个字节的数据,可以使用以下代码:
char buffer[1] = {'a'};
int n = write(sockfd, buffer, 1);
5.关闭socket
通信结束后,需要关闭socket。可以使用close()函数关闭socket。例如,要关闭刚才创建的socket,可以使用以下代码:
close(sockfd);
从RPC到HTTP:网络通信协议的演变
前言
随着信息技术的飞速发展,网络通信协议在构建分布式系统和应用程序中发挥着至关重要的作用。从早期的远程过程调用(RPC)到现代的超文本传输协议(HTTP),网络通信协议经历了显著的演变。
在刚开始C/S架构流行时,对于C/S架构下的软件,如聊天软件、办公软件等,它们只需要与自己公司的服务器通信,所以可以使用自家定制的RPC协议进行远程调用即可。但随着万维网与B/S架构的出现,浏览器产生了,而浏览器需要访问来自不同公司的很多网站,这不能通过RPC进行访问,所以需要一个统一的标准来与这些网站服务器通信。
这时HTTP协议发挥作用的地方,HTTP为B/S架构(浏览器/服务器架构)提供了一个统一的标准,让不同网站的服务器能够与浏览器交互,HTTP也是RPC的一种实现方式。
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP。
RPC
RPC(Remote Procedure Call:远程过程调用):是一种进程间通信方式,是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
RPC基于TCP协议,客服端与服务端需要进行三次握手完成可靠连接,第四步进行数据传输。因为TCP是数据传输层,传输协议需要服务器统一编写,进行二进制传输,依赖序列化和反序列化规则,对于大部分应用需要灵活变动数据则不适用,RPC常用于Socket连接或一些基本不变动的传输格式数据,减少数据变动带来的开发成本。
比如说现在有两台服务器A和B,一个应用部署在A服务器上,另一个应用部署在B服务器上,如果A应用想要调用B应用提供的方法,由于他们不在一台机器下,也就是说它们不在一个JVM内存空间中,是无法直接调用的,需要通过网络进行调用,那这个调用过程就叫做RPC。
由于HTTP在应用层中完成,整个通信的代价较高,远程过程调用中直接基于TCP进行远程调用,数据传输在传输层TCP层完成,更适合对效率要求比较高的场景,RPC主要依赖于客户端和服务端之间建立Socket链接进行,底层实现比REST更复杂。无论是何种类型的数据,最终都需要序列化转换成二进制流在网络上进行传输,数据的发送方需要将对象序列化转换为二进制流,而数据的接收方则需要把二进制流反序列化为对象.HTTP
HTTP(Hypertext Transfer Protocol:超文本传输协议):是互联网上应用最为广泛的一种应用层协议,主要用于分布式、协作式和超媒体信息系统的应用,如万维网(WWW),客户端发起请求,服务器处理请求并返回响应,通常用于web浏览器和web服务器间的通信,HTTP定义了请求报文和响应报文的结构以及不同的请求方法(GET, POST等)
更多资讯,点击全场景直播解决方案-航天云网解决方案
相关问答
...错误的是________.A. 网络协议 是计算机网络中互相 通信 的对...[最佳回答]我选B记得是有一个时序的
从计算机 网络 组成的角度看 计算机可以分为?答:从计算机网络组成的角度看,计算机网络从逻辑功能上可以分为资源子网和通信子网两个部分。一、资源子网1、资源子网概念资源子网:从计算机网络各组成部件...
... C 、计算机技术 与通信 技术D、信息技术与通讯技术2、计_作业帮[最佳回答]络通信的工作原理1)TCP/IP协议的数据传输过程:TCP/IP协议所采用的通信方式是分组交换方式。所谓分组交换,简单说就是数据在传输时分成若干段,每个...
C 网到底是什么呢?C网是移动通信网络的第二代网络,也称为数字蜂窝网。1.C网是移动通信网络的第二代网络,也称为数字蜂窝网。2.C网在20世纪80年代初期问世,是一种采用数字传...
网络 管理中,CS模式 C 和S分别代表什么?_?C/S(Client/Server,客户机/服务器)模式又称C/S结构,是软件系统体系结构的一种。C/S模式简单地讲就是基于企业内部网络的应用系统。与B/S(Browser/Server,浏...
b类ip地址和 c 类ip地址能联通吗?b类ip地址和c类ip地址不能联通,两者区别如下:B类地址,用于主机数目较多的中型网络,网络数量达16384个,每个网络可以容纳主机数量为65536个,这类地址的前两...
计算机 网络 应用层和传输层及 网络 层 协议 有哪些?应用层协议:1、远程登录协议(Telnet)2、文件传输协议(FTP)3、超文本传输协议(HTTP)4、域名服务协议(DNS)5、简单邮件传输协议(SMTP)6、邮...应用层协议...
它们是通过什么 协议 进行互相 通信 的?-ZOL问答它们是通过什么协议进行互相通信的?举报服务器6人讨论1961次围观关注问题写回答讨论回答(6)8023mjp我先说下什么是:服务器软件、客户端软件。服务器软...
typec口可以 通信 吗?typec口可以通信。它的主要特性就是能够传输数据。USBType-C接口除了插拔时更加方便外,更重要的就是它具有极强的兼容性。最高10Gb/s的数据传输带宽不同设...
计算机问题一:填空题1、计算机 网络 的定义:计算机 网络 是指将...[最佳回答]1、计算机传输介质网络协议资源共享2、计算机,网络协议,传输介质3、局域网,城域网,广域网二1、b2、d3、b4、a5、d6、d7、b8、d1、计算机传输介...