📝 Unix套接字教程
16篇技术文档📅  最后修改于: 2020-11-05 04:49:04        🧑  作者: Mango
套接字是相同或不同计算机上的交换点,用于交换数据。套接字受Unix,Windows,Mac和许多其他操作系统支持。本教程通过介绍诸如网络地址,主机名,体系结构,端口和服务之类的基本主题,为您提供了坚实的基础,然后介绍了使用网络地址的功能,并介绍了如何使用套接字编写客户端/服务器代码。本教程是为有兴趣学习Unix套接字的数据交换功能的每个人而设计的。先决条件学习套接字不是一件容易的事。我们假设您精通...
📅  最后修改于: 2020-11-05 04:49:32        🧑  作者: Mango
套接字允许在相同或不同机器上的两个不同进程之间进行通信。更准确地说,这是使用标准Unix文件描述符与其他计算机对话的一种方式。在Unix中,每个I / O操作都是通过写入或读取文件描述符来完成的。文件描述符只是与打开的文件关联的整数,可以是网络连接,文本文件,终端或其他内容。对于程序员来说,套接字的外观和行为都非常类似于低级文件描述符。这是因为read()和write()之类的命令与套接字一起使用...
📅  最后修改于: 2020-11-05 04:49:56        🧑  作者: Mango
在继续实际工作之前,让我们先讨论一下网络地址-IP地址。IP主机地址(或更常见的是IP地址)用于标识连接到Internet的主机。 IP代表Internet协议,是指Internet整个网络体系结构的Internet层。IP地址是32位数字,可解释为四个8位数字或八位字节。每个IP地址都唯一标识参与的用户网络,网络上的主机以及用户网络的类别。IP地址通常以点分十进制的形式写成N1.N2.N3.N4...
📅  最后修改于: 2020-11-05 04:50:12        🧑  作者: Mango
主机名很难记住,因此用普通名称(例如Takshila或Nalanda)来命名。我们编写软件应用程序以找出与给定名称对应的点分IP地址。根据给定的字母数字主机名找出点分IP地址的过程称为主机名解析。主机名解析是通过高容量系统上的特殊软件完成的。这些系统称为域名系统(DNS),它保留IP地址和对应的普通名称的映射。/ etc / hosts文件主机名和IP地址之间的对应关系保存在名为hosts的文件中...
📅  最后修改于: 2020-11-05 04:50:46        🧑  作者: Mango
大多数的Net应用程序使用客户端-服务器体系结构,该体系结构是指两个进程或两个相互通信以交换某些信息的应用程序。这两个进程之一充当客户端进程,另一个进程充当服务器。客户流程这是过程,通常会要求提供信息。获得响应后,此过程可能会终止或可能会执行其他一些处理。例如,Internet浏览器用作客户端应用程序,该应用程序向Web服务器发送请求以获取一个HTML网页。服务器进程这是从客户端接收请求的过程。从...
📅  最后修改于: 2020-11-05 04:51:18        🧑  作者: Mango
Unix套接字编程中使用了各种结构来保存有关地址和端口的信息以及其他信息。大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。本章定义的结构与Internet协议族有关。sockaddr第一个结构是sockaddr,它保存套接字信息-这是一个通用的套接字地址结构,它将在大多数套接字函数调用中传递。下表提供了成员字段的描述-AttributeValuesDescriptionsa_famil...
📅  最后修改于: 2020-11-05 04:51:44        🧑  作者: Mango
当客户端进程要连接服务器时,客户端必须有一种方法来标识其要连接的服务器。如果客户端知道服务器所在主机的32位Internet地址,则可以联系该主机。但是客户端如何识别在该主机上运行的特定服务器进程?为了解决标识主机上运行的特定服务器进程的问题,TCP和UDP都定义了一组知名端口。出于我们的目的,将端口定义为1024到65535之间的整数。这是因为所有小于1024的端口号都被认为是众所周知的-例如,...
📅  最后修改于: 2020-11-05 04:52:10        🧑  作者: Mango
不幸的是,并非所有计算机都以相同的顺序存储包含多字节值的字节。考虑一个由2个字节组成的16位Internet。有两种存储此值的方法。小尾数-在此方案中,低位字节存储在起始地址(A)上,高位字节存储在下一个地址(A +1)上。大尾数-在此方案中,高位字节存储在起始地址(A)上,低位字节存储在下一个地址(A + 1)上。为了允许具有不同字节顺序约定的机器相互通信,Internet协议为通过网络传输的数...
📅  最后修改于: 2020-11-05 04:52:29        🧑  作者: Mango
Unix提供了各种函数调用来帮助您操纵IP地址。这些函数在ASCII字符串(人们喜欢使用的字符串)和网络字节排序的二进制值(存储在套接字地址结构中的值)之间转换Internet地址。以下三个函数调用用于IPv4寻址-int inet_aton(const char * strptr,struct in_addr * addrptr)in_addr_t inet_addr(const char * ...
📅  最后修改于: 2020-11-05 04:53:49        🧑  作者: Mango
本章介绍编写完整的TCP客户端和服务器所需的核心套接字功能。下图显示了客户端和服务器的完整交互-插座功能要执行网络I / O,进程必须做的第一件事是调用套接字函数,指定所需的通信协议类型和协议族等。该调用返回一个套接字描述符,您可以在以后的系统调用中使用它,如果出错则返回-1。参量family-它指定协议家族,是下面显示的常量之一-FamilyDescriptionAF_INETIPv4 prot...
📅  最后修改于: 2020-11-05 04:54:21        🧑  作者: Mango
本章介绍在进行套接字编程时使用的所有辅助函数。其他帮助器功能在“端口和服务以及网络字节顺序”一章中进行了介绍。写功能写函数尝试将buf指向的缓冲区中的nbyte字节写入与打开的文件描述符fildes关联的文件中。您也可以使用send()函数将数据发送到另一个进程。成功完成后,write()返回实际写入与fildes关联的文件的字节数。此数字永远不会大于nbyte。否则,返回-1。参量fildes-...
📅  最后修改于: 2020-11-05 04:54:49        🧑  作者: Mango
要使进程成为TCP服务器,您需要执行以下步骤-使用socket()系统调用创建一个套接字。使用bind()系统调用将套接字绑定到一个地址。对于Internet上的服务器套接字,地址由主机上的端口号组成。用listen()系统调用监听连接。接受与accept()系统调用的连接。该调用通常会阻塞,直到客户端与服务器连接为止。使用read()和write()系统调用发送和接收数据。现在,让我们以源代码的...
📅  最后修改于: 2020-11-05 04:55:06        🧑  作者: Mango
要使进程成为TCP客户端,您需要按照下面的步骤−使用socket()系统调用创建一个套接字。使用connect()系统调用将套接字连接到服务器的地址。发送和接收数据。有很多方法可以做到这一点,但是最简单的方法是使用read()和write()系统调用。现在,让我们以源代码的形式来介绍这些步骤。将此代码放入文件client.c中,并使用gcc编译器进行编译。运行该程序并传递服务器的主机名...
📅  最后修改于: 2020-11-05 04:55:38        🧑  作者: Mango
这是与套接字编程有关的所有功能的列表。端口和服务功能Unix提供以下功能来从/ etc / services文件中获取服务名称。struct servent * getservbyname(char * name,char * proto)-此调用采用服务名称和协议名称,并返回该服务的相应端口号。struct servent * getservbyport(int port,char * prot...
📅  最后修改于: 2020-11-05 04:55:59        🧑  作者: Mango
以下资源包含有关Unix套接字的其他信息。请使用它们来获得有关该主题的更深入的知识。Unix套接字上的有用链接Unix套接字Wiki–Unix套接字的Wikipedia参考。套接字编程简介-有关套接字编程的另一篇教程。套接字手册页-该手册页介绍了Linux网络套接字层用户界面。传输控制协议-TCP协议的完整规范。 (RFC 793)IP / IPv4协议-eInternet协议版本4(RFC 79...