您现在的位置是:主页 > news > wordpress建设下载网站/公众号运营
wordpress建设下载网站/公众号运营
admin2025/6/6 22:03:25【news】
简介wordpress建设下载网站,公众号运营,网站网络安全怎么做,做网站的意义网络套接字介绍套接字介绍定义跨网络的主机间通讯套接字位置套接字常用概念客户/服务器程序的套接字函数套接字相关的系统调示例 1示例2服务器端 tcpserver.py服务器端 tcpclient.py示例3套接字介绍 网络套接字(英语:Network socket;又译网络…
网络套接字介绍
- 套接字介绍
- 定义
- 跨网络的主机间通讯
- 套接字位置
- 套接字常用概念
- 客户/服务器程序的套接字函数
- 套接字相关的系统调
- 示例 1
- 示例2
- 服务器端 tcpserver.py
- 服务器端 tcpclient.py
- 示例3
套接字介绍
网络套接字(英语:Network socket;又译网络套接字、网络接口、网络插槽)在计算机科学中是计算机网络中行程间数据流的端点。使用以网际协议(Internet Protocol)为通信基础的网络套接字,称为网际套接字(Internet socket)。因为网际协议的流行,现代绝大多数的网络套接字,都是属于网际套接字。
socket 是一种操作系统提供的进程间通信机制。
在操作系统中,通常会为应用程序提供一组应用程序接口(API),称为套接字接口(英语:socket API)。应用程序可以通过套接字接口,来使用网络套接字,以进行数据交换。最早的套接字接口来自于4.2 BSD,因此现代常见的套接字接口大多源自Berkeley套接字(Berkeley sockets)标准。
在套接字接口中,以IP地址及通信端口组成套接字地址(socket address)。远程的套接字地址,以及本地的套接字地址完成连线后,再加上使用的协议(protocol),这个五元组(five-element tuple),作为套接字对(socket pairs),之后就可以彼此交换数据。
例如,在同一台计算机上,TCP协议与UDP协议可以同时使用相同的port而互不干扰。 操作系统根据套接字地址,可以决定应该将数据送达特定的行程或线程。这就像是电话系统中,以电话号码加上分机号码,来决定通话对象一般。
由于每个主机系统都有各自命名进程的方法,而且常常是不兼容的,因此,要在全网范围内硬把进程名字统一起来是不现实的。所以,每个计算机网络中都要引入一种起介质作用的、全网一致的标准名字空间。这种标准名字,在ARPA网中称作套接字,而在很多其他计算机网中称作信口。更确切地说,进程之间的连接是通过套接字或信口构成的。
定义
系统内部接口(内部网络),接口描述符(抽象接口描述符)和接口地址之间的差别其实很细微,日常编程用的时候几乎不做区别。并且详细的网络接口有下面几种特征:
- 本地接口地址,由本地ip地址和(包括TCP,UDP)端口号
- 传输协议,例如TCP、UDP、raw IP协议,如果只是指定IP地址,那么TCP 53与UDP 53不是一个接口。
一个已经创建连接的接口双方都有整数形式的接口描述符,用来唯一表示该接口。操作系统根据对方接口发过来的IP以及传输协议头信息来提取接口的地址信息,并且将应用数据去除头信息之后提交给相应的应用程序。 在很多网络协议、教科书以及本文中,接口指的是有一个独一无二的接口号的实体。在一些其他的文章[来源请求]当中,接口被叫做本地接口地址,比如…“ip和端口的结合”。在一RFC147标准中,这个定义与1971的ARPA网有关,接口指的是一个32位数字,其中偶数的是接收接口,奇数的是发送接口,但是今天通信已经可以实现双向传输,在一个接口中,可以发送的同时还可以接收。
在类UNIX系统和Windows系统,命令行工具netstat和ss可用以查看当前系统的接口情况。
跨网络的主机间通讯
在建立通信连接的每一端,进程间的传输要有两个标志:
- IP地址和端口号,合称为套接字地址 socket address
- 客户机套接字地址定义了一个唯一的客户进程
- 服务器套接字地址定义了一个唯一的服务器进程
套接字位置
套接字常用概念
-
Socket:套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换,SocketAPI出现于1983年,4.2 BSD实现
-
Socket API:封装了内核中所提供的socket通信相关的系统调用
-
Socket Domain:根据其所使用的地址
AF_INET:Address Family,IPv4 AF_INET6:IPv6 AF_UNIX:同一主机上不同进程之间通信时使用
-
Socket Type:根据使用的传输层协议
SOCK_STREAM:流,tcp套接字,可靠地传递、面向连接 SOCK_DGRAM:数据报,udp套接字,不可靠地传递、无连接 SOCK_RAW: 裸套接字,无须tcp或udp,APP直接通过IP包通信
客户/服务器程序的套接字函数
套接字相关的系统调
# socket() # 创建一个套接字
# bind() # 绑定IP和端口
# listen() # 监听
# accept() # 接收请求
# connect() # 请求连接建立
# write() # 发送
# read() # 接收
# close() # 关闭连接
示例 1
这个例子是模拟Berkeley套接字接口,我们通过80端口发送hello,world
到1.2.3.4的主机上。下方代码演示了创建接口、连接远程主机、发送数据和关闭接口的过程。
Socket socket = getSocket(type = "TCP")
connect(socket, address = "1.2.3.4", port = "80")
send(socket, "Hello, world!")
close(socket)
示例2
服务器端 tcpserver.py
import socket
HOST='127.0.0.1'
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(3)
print('tcpServer listen at: %s:%s\n\r' %(HOST,PORT))
while True:client_sock,client_addr=sock.accept()print('%s:%s connect' %client_addr)while True:recv=client_sock.recv(BUFFER)if not recv:client_sock.close()breakprint('[Client %s:%s said]:%s' %(client_addr[0],client_addr[1],recv))client_sock.send(‘I am tcpServer and has received your message')
sock.close()
服务器端 tcpclient.py
import socket
HOST='127.0.0.1'
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
sock.send(‘hello, tcpServer!,I am TcpClient')
recv=sock.recv(BUFFER)
print('[tcpServer said]: %s' % recv)
sock.close()
示例3
HTTP服务通信过程。