首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何进行网络编程?

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。...为了传递数据,当然数据的格式也是多种多样。网络通信就是为了联通多方然后进行通信用的,即把数据从一方传递给另一方。 如果现代社会没有网络,我们操作任何电脑或者手机都是单机模式,只能自己跟自己玩。...网络通信的本质:也即进程之间的通信 表现形式:不同的电脑间的数据传递如何连接网络——套接 套接是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。...如果套接像一个电话插孔——允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码☎️的组合。...因为这些套接(AF_INET)的网络版本使用因特网协议(IP)来搜寻网络中的主机,所以整个系统通常结合这两种协议(TCP 和 IP) 来进行(当然,也可以使用 TCP本地[非网络的 AF_LOCAL

1.5K21

socket的简单使用概念socket通信过程,使用步骤:导入头文件创建socket函数connect连接到服务器发送数据接收服务器返回的数据关闭连接例子:请求百度

概念 socket又称“套接”,socket在应用层和传输层之间,我们的应用层只要将数据传递给socket就可以了,socket会传递给传输层、网络层等。 网络通信其实就是Socket之间的通信。...如果调用成功就返回新创建的套接的描述符(套接描述符是一个整数类型的值),如果失败就返回-1 ---- connect连接到服务器 作用:用来将参数sockfd 的socket 连至参数serv_addr...使用 send 时套接必须已经连接。send 不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send 成功返回,并不必然表示连接另一端的进程接收数据。...存放接收到的数据字节的数组,uint8_t类型 可以通过NSData的dataWithBytes:方法将字节(Bytes)转换为Data数据 存放字节的数组大小 是否阻塞,一般填0 返回值: 若无错误发生...---- 例子:请求百度 //发送和接收数据 - (NSString *)sendAndRecv:(NSString *)sendMsg { //3 服务器发送数据 //成功则返回实际传送出去的字符数

1.8K70
您找到你想要的搜索结果了吗?
是的
没有找到

sockets: SCTP「建议收藏」

:(PF:协议族) PF_INET PF_INET6 PF_UNIX PF_NCA type: SOCK_STREAM(字节流套接)(tcp、sctp) SOCK_DGRAM(数据报套接)(udp)...SOCK_SEQPACKET(有序分组套接)(sctp) SOCK_RAW(原始套接)(ipv4、ipv6) SOCK_RDM(无序可靠数据报套接) protocol:(传输层协议) 0:tcp...); 释放上面函数分配的资源 int sctp_getladdrs(int sockfd, sctp_assoc_t id, //一到多式的套接的关联标识 struct sockaddr **addrs...//存放返回的多个本地地址的通用套接地址结构 ); 返回存放在addrs中的本地的地址数(类似于getsockname) void sctp_freeladdrs(int sockfd, sctp_assoc_t...id, struct sockaddr**addrs); 释放上面函数分配的资源 ssize_t sctp_sendmsg(int sockfd, const void *msg, size_t

89910

socketpair原理_pair of shoes意思

如果函数成功,则返回0,创建好的套接分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接可以用于全双工通信,每一个套接可以读也可以写。...如果往一个套接(如sv[0])中写入后,再从该套接读时会阻塞,只能在另一个套接中(sv[1])上读成功; 3. 读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。...\n", errno, strerror(errno)); return EXIT_FAILURE; } else if(pid > 0) { //关闭另外一个套接...---- 用sendmsg传递数据程序实例 /*sendmsg.c*/ #include #include #include #include...收到数据为: it is a test 程序分析:由套接sock[1]发数据到本地主机,由套接sock[0]接收发送过来的数据。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

37810

socketpair函数用法

Unix套接好像是套接和管道的混合,socketpair()可以创建一对无命名的、相互连接的Unix域套接。 管道历史上,它们是半双工的(数据只能在一个方向上流动),但是现在也有全双工管道。...如果函数成功,则返回0,创建好的套接分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接可以用于全双工通信,每一个套接可以读也可以写。...如果往一个套接(如sockfd[0])中写入后,再从该套接读时会阻塞,只能在另一个套接中(sockfd[1])上读成功; 3....读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。如果是父子进程时,一般会功能分离,一个进程用来读,一个用来写。...收到数据为: it is a test 程序分析:由套接sock[1]发数据到本地主机,由套接sock[0]接收发送过来的数据。

2K30

【网络编程系列】二:socket通信原理及实践

本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的)...我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。...这个socket描述跟文件描述一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。 正如可以给fopen的传入不同参数值,以打开不同的文件。...如果accpet成功,那么其返回值是由内核自动生成的一个全新的描述,代表与返回客户的TCP连接。...//指定套接的类型,若是SOCK_DGRAM,则用的是udp不可靠传输 //配合type参数使用,指定使用的协议类型(当指定套接类型后,可以设置为0,因为默认为UDP或TCP) if

1.2K60

一切皆Socket

如果函数调用成功,会返回一个标识这个套接的文件描述符,失败的时候返回-1。...socket只有到资源足够或者有进程释放内存 EPROTONOSUPPORT 制定的协议type在domain中不存在 其他 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时...本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的)...我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。...这个socket描述跟文件描述一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。 正如可以给fopen的传入不同参数值,以打开不同的文件。

56610

CS 144 Lab Seven -- putting it all together

,下面是对每个参数的解释: domain: 套接的协议域(也称为地址族),指定了套接的通信范围和协议类型。...例如,AF_INET 表示 IPv4 地址族,AF_UNIX 表示本地套接(Unix 域套接)。这个参数决定了套接将在哪种网络层协议上工作。 type: 套接的类型,指定了套接的通信方式。...例如,SOCK_STREAM 表示流式套接(用于 TCP),SOCK_DGRAM 表示数据报套接(用于 UDP)。这个参数决定了套接如何进行数据传输。...这是因为 TUN 设备在内核中被实现为一个虚拟网络设备,有关于其属性的信息可以通过套接选项来获取。 在这个情境下,getsockopt 调用用于获取 TUN 设备的协议域和类型。...如果 TUN 设备的实际协议域或类型与期望的不匹配,那么将抛出异常,表示套接不满足所需的属性。

17940

kernel|network| Linux Networking Stack: Sending Data

数据是使用系统调用(如 sendto、sendmsg 等)写入的。 数据通过套接子系统传递套接的协议系列系统(在我们的例子中,AF_INET)。...协议系列通过协议层传递数据,协议层(在许多情况下)将数据排列成数据包。 数据通过路径图层,沿途填充目标和邻居缓存(如果它们是冷的)。如果需要查找以太网地址,这可能会生成 ARP 流量。...让我们首先检查协议家族如何在内核中注册并由套接子系统使用,然后我们可以继续接收数据。...We’ll see how data is appended later. udp_sendmsg中的代码将检查 up->pending 以确定套接当前是否已填充,如果是,则直接进行追加数据。...如果 udp_sendmsg内核函数未排列结构 msghdr 结构,则从套接本身检索目标地址和端口,并将套接标记为“已连接”。

1.8K10

Linux的SOCKET编程详解

TCP/IP协议存在于OS中,网络服务通过OS提供,在OS中增加支持TCP/IP的系统调用——Berkeley套接,如Socket,Connect,Send,Recv等 UDP(User Data...然后,应用程序以该描述符作为传递参数,通过调用函数来完成某种操作(例如通过网络传送数据或接收输入的数据)。...针对套接的系统数据结构: 1)、套接API里有个函数socket,它就是用来创建一个套接套接设计的总体思路是,单个系统调用就可以创建任何套接,因为套接是相当笼统的。...同样的,它也可以被设置为NULL。 如果accept成功返回,则服务器与客户已经正确建立连接了,此时服务器通过accept返回的套接来完成与客户的通信。...注意:close操作只是使相应socket描述的引用计数-1,只有当引用计数为0的时候,才会触发TCP客户端服务器发送终止连接请求。 5.

2.5K10

Socket原理

本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(...我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。...这个socket描述跟文件描述一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。 正如可以给fopen的传入不同参数值,以打开不同的文件。...在网络程序中,当我们套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是 全部的数据。2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。...,若是SOCK_DGRAM,则用的是udp不可靠传输 //配合type参数使用,指定使用的协议类型(当指定套接类型后,可以设置为0,因为默认为UDP或TCP) if(sListen == INVALID_SOCKET

49920

UNIX域协议(无名套接

关于什么是UNIX域套接可以参考:https://cloud.tencent.com/developer/article/1018893 这里主要介绍非命名的UNIX域套接的用法。...功能:创建一个全双工的流管道 参数: domain:协议家族,为AF_LOCAL或AF_UNIX type:套接类型。可以是SOCK_STREAM或者SOCK_DGRAM。...为0 sv:返回套接对,这个是输出参数。返回的两个描述符都是可读可写的。 返回值:成功返回0,失败返回-1....注意:由于创建的每个套接都是没有名字的,这就意味着无关进程不能使用它们。 2.一个简单的例子: 父进程给子进程发送一个数据给子进程,子进程收到数据后最数据进行加一操作,再发回给父进程。...2)普通的TCP UDP套接是不能传递文件描述符的

74070

Socket通信原理

本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的)...我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。...根据美国计算机历史博物馆的记载,Croker写道:“命名空间的元素都可称为套接接口。一个套接接口构成一个连接的一端,而一个连接可完全由一对套接接口规定。”...这个socket描述跟文件描述一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。 正如可以给fopen的传入不同参数值,以打开不同的文件。...在网络程序中,当我们套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是 全部的数据。2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。

84610

RPC 服务器之【多进程描述符传递】高阶模型

那就存在一个问题,Master 进程拿到的客户端套接如何传递给 Slave 进程。 ? 这时,神奇的 sendmsg 登场了。它是操作系统提供的系统调用,可以在不同的进程之间传递文件描述符。...同管道一样,Unix 域套接也分为有名套接和无名套接,有名套接会在文件系统指定一个路径名,无关进程之间都可以通过这个路径来访问 Unix 域套接。...而无名套接一般用于父子进程之间,父进程会通过 socketpair 调用来创建套接,然后 fork 出来子进程,这样子进程也会同时持有这个套接的引用。后续父子进程就可以通过这个套接互相通信。...参数传递的,它的意思是 「辅助数据」,而 buffers 表示需要传递的消息内容,因为消息内容这里没有意义,所以这个字段可以任意填写,但是必须要有内容,如果没有内容,sendmsg 方法就是一个空调用...思考题 sendmsg/recvmsg 除了可以发送描述符外还可以用来干什么? sendmsg/recvmsg 发送接收描述符在内核态具体是如何工作的?

90620

socket通讯原理及例程(一看就懂)

本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用...我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。...这个socket描述跟文件描述一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。 正如可以给fopen的传入不同参数值,以打开不同的文件。...在网络程序中,当我们套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是 全部的数据。2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。...SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //用来指定套接使用的地址格式,通常使用AF_INET //指定套接的类型

1.6K30

Linux进程间通信方式之socket使用实例

套接是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以本地单机上进行,也可以跨网络进行。...流套接由类型SOCK_STREAM指定,它们是在AF_INET域中通过TCP/IP连接实现的。他们也是AF_UNIX域中常见的套接类型。...SOCK_DGRAM 数据报式本地套接的应用场合很少,因为流式套接本地的连接时间可以忽略,所以效率并没有提高,而且发送接收都需要携带对方的本地地址,因此很少甚至几乎不使用。...与本地套接相对应的是网络套接可以用于在网络上传送数据,换言之,可实现不同机器上的进程通信过程。...在 TCP/IP 协议中,IP 地址的首字节为 127 即代表本地,因此本地套接通信可以使用 IP 地址为 127.x.x.x 的网络套接来实现。

5.2K61

网络中进程之间如何通信?

这幅图很形象地描述了通信的过程,这也就引出了小媛想要和大家介绍的——网络中进程间具体是怎样通信的—— 网络中进程间通信主要是靠socket (网络中是与本地相对应的) 简单的通信流程如下所示: 一个服务器通常通过创建一个套接...内核通过文件描述符来索引一个进程打开的文件。当你需要读或写一个文件时,你需要用文件描述符来标记它。 网络中的进程通信 在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。...创建套接 socket() socket函数对应于普通文件的打开操作。 (使用协议PROTOCOL在域DOMAIN中创建TYPE类型的新套接如果PROTOCOL为零,则自动选择一个。...在网络程序中,当我们套接文件描述符写时有俩种可能。 1)write的返回值大于0,表示写了部分或者是全部的数据。 2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。...注意:close操作只是使相应socket描述的引用计数-1,只有当引用计数为0的时候,才会触发TCP客户端服务器发送终止连接请求。

56620

详解操作系统之进程间通信 IPC (InterProcess Communication)

信号生命周期和处理流程 (1)信号被某个进程产生,并设置此信号传递的对象(一般为对应进程的pid),然后传递给操作系统; (2)操作系统根据接收进程的设置(是否阻塞)而选择性的发送给接收者,如果接收者阻塞该信号...(且该信号是可以阻塞的),操作系统将暂时保留该信号,而不传递,直到该进程解除了对此信号的阻塞(如果对应进程已经退出,则丢弃此信号),如果对应进程没有阻塞,操作系统将传递此信号。...套接(socket) 套接是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以本地单机上进行,也可以跨网络进行。...(3)套接协议类型 因特网提供三种通信机制, 一是流套接,流套接在域中通过TCP/IP连接实现,同时也是AF_UNIX中常用的套接类型。...原始套接与标准套接的区别在于: 原始套接可以读写内核没有处理的IP数据包,而流套接只能读取TCP协议的数据,数据报套接只能读取UDP协议的数据。

2.8K30

【网络】socket套接基础知识

所以发送数据的时候一定会多出一部分数据(以协议的形式呈现) TCP/UDP协议 我们用的套接接口一定会使用传输层协议,不会绕过传输层去调用下面的协议。...常见的有三种: 1.网络套接 2.原始套接 3.unix域间套接 我们主要了解第一个网络套接 网络套接主要运用于跨主机之间的通信,也能支持本地通信,而域间套接只能在本地通信。...而原始套接可以跨过传输层(TCP/IP协议)访问底层的数据。这些套接应用场景完全不同,所以我们想用就得用三套不同的接口。...而为了方便,设计者只设计了一套接口,就可以通过不同的参数,解决所有网络或者其他场景下的通信问题。...*/ char sun_path[108]; /* 带有路径的文件名 */ };//通过同一个文件的路径来让进程看到同一份资源 可以看到sockaddr_in和sockaddr_un

22120
领券