理论部分:
Socket(套接字)是网络通信中的一个概念,它是应用程序与TCP/IP协议族通信的中间软件抽象层,提供了一组接口。Socket允许应用程序通过网络发送和接收数据,它是网络环境中进程间通信的API(应用程序编程接口)。Socket可以看作是两个网络应用程序进行通信时,各自通信连接中的端点,是逻辑上的概念。每个Socket都有其类型和一个与之相连的进程,通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的Socket中,使对方能够接收到这段信息23.
网络通信
Socket的工作原理
Socket的工作原理类似于电话通信。首先,服务端需要初始化Socket,并与端口绑定,然后对端口进行监听,等待客户端的连接请求。客户端则创建Socket,并通过网络发送连接请求到服务端。一旦服务端接受了客户端的连接请求,双方就建立了一个TCP连接。在这个连接上,客户端可以向服务端发送请求,服务端接收请求后处理,并将响应发送回客户端。最后,双方关闭连接,完成一次通信3.
Socket工作原理
Socket的类型
Socket主要有以下几种类型:
- 流套接字(SOCK_STREAM):提供面向连接、可靠的数据传输服务,保证数据能够实现无差错、无重复送,并按顺序接收。
- 数据报套接字(SOCK_DGRAM):提供一种无连接的服务,不保证数据传输的可靠性,数据可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。
- 原始套接字(SOCK_RAW):可以读写内核没有处理的IP数据包,用于访问其他协议发送的数据2.
Socket的应用
Socket广泛应用于网络编程中,几乎所有的网络服务都是基于Socket实现的。例如,Web服务器、数据库服务器、即时通讯软件等,都使用Socket来处理客户端的请求和发送响应
测试部分:
socket是系统模块,不需要第三方安装,直接引入即可
服务端:
#socket通信的服务端
import socket
if __name__ == '__main__':
host =socket.gethostbyname('localhost')
print(host)#获取本机IP地址
#设置端口
port=9000
#scoket.AF_INET:使用IPv4协议
#socket.SOCK_STREAM:使用TCP协议
#创建套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(5)
print(f"服务器已启动,监听端口{port}")
while True:
#接受客户端连接
client, addr = server.accept()
print(f"客户端{addr}已连接")
#发送数据给客户端
hello="连接成功!"
client.send(hello.encode('utf-8'))
#接收客户端数据
while True:
data = client.recv(10).decode('utf-8')#该命令是阻塞式的,等待客户端发送数据
print(f"客户端{addr}说:{data}")
if data == 'exit':
break
client.close()
break
客户端:
#socket客户端
import socket
if __name__ == '__main__':
host=input("请输入服务器IP地址:")
port=9000
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((host,port))
hello=client.recv(1024).decode('utf-8')
print(hello)
while True:
data=input("请输入要发送的数据:")
client.send(data.encode('utf-8'))
运行结果: