网络编程中的一个基本组件是套接字,通过套接字向对方发送信息。
套接字分为两类:服务套接字与客户端套接字。创建服务器套接字后,它将在某个网络地址(由IP地址和端口号组成)处监听,知道客户端套接字建立连接。随后,客户端和服务器就能通信了。
1、Python的socket模块
套接字是模块socket中socket类的实例,包含三个参数:
我之所以在socket()函数中没有填入参数,是因为在Python中它已经有了默认参数。
1、family(给定的套接族)一般有两种重要参数:
socket.AF_INET | 用于服务器与服务器之间的网络通信 |
socket.AF_INET6 | 基于IPV6方式的服务器与服务器之间的网络通信 |
2、type(套接字类型),也是一般两个类型:
socket.SOCK_STREAM | 基于TCP的流式socket通信 |
socket.SOCK_DGRAM | 基于UDP的数据报式socket通信 |
3、协议(默认值为0就好)
2、服务器与客户端
服务器套接字先调用方法bind,再调用方法listen来监听特定的地址。然后,客户端套接字就可以连接到服务器了,办法是调用方法connect并提供调用方法bind时指定的地址(在服务器端,可以使用函数socket.gethostname获取当前机器的主机名)。这里的地址是一个格式为(host,port)的元组,方法listen接受一个参数--待办任务清单的长度(即最多可有多少个连接在队列中等待接纳,到达这个数量后将开始拒绝连接)。
服务器套接字开始监听后,就可以接受客户端连接了,这是使用方法accept来完成。会返回一个格式为(client,address)的元组,其中client是一个客户端套接字,address是地址。
为了传输数据,套接字提供了send和recv两个方法,send即发送数据,recv即接收数据。
3、利用socket编写简单的服务器和客户端代码
首先先编写服务器相关socket代码
import socket
'''===============服务器================'''
server=socket.socket()
host=socket.gethostname() #获取主机名
port=1234
server.bind((host,port)) #定义主机名和端口
server.listen(5) #设置监听
while True:
c,addr=server.accept()
print('Got connection from ',addr)
c.send(b'Thank you for connecting.') #向客户端发送信息
c.close() #关闭连接
其次再编写客户端相关socket代码
import socket
'''===============客户器================'''
client=socket.socket()
host=socket.gethostname() #获取主机名
port=1234 #端口号
client.connect((host,port)) #连接socket_server服务器
print(client.recv(1024)) #打印服务器反馈信息
tips:在运行过程中,首先需要运行服务器代码,再运行客户端代码。