网络编程
定义:所为网络编程即是对信息的发送和接收。
主要工作:
(1)发送端:将信息以规定的协议组装成数据包。
(2)接收端:对收到的数据包解析,以提取所需要的信息。
Socket:两个在网络上的程序通过一个双向的通信连接,实现数据的交换,此连接的一端称为一个socket。
Socket的本质:Socket是一个编程接口(API),TCP/IP协议需要向开发者提供做网络开发用的接口,这就是Socket接口,它是对TCP/IP协议网络通信的封装。
python中用有标准库socket,要进行socket编程,只需导入这个模块即可。
例一(实现一个单对单,只能发送一次消息的一次性服务端和客户端):
1 #服务端
2 import socket
3
4 address = ("localhost", 6666) #写明服务端要监听的地址,和端口号
5 server = socket.socket() #生成一个socket对象
6 server.bind(address) #用socket对象绑定要监听的地址和端口
7 server.listen() #开始监听
8
9 conn,addr = server.accept() #等带新连接接入服务端,返回一个新的socket对象和地址,地址格式同前面格式
10 '''
11 Wait for an incoming connection. Return a new socket
12 representing the connection, and the address of the client.
13 '''
14 data = conn.recv(1024) #接收信息,写明要接收信息的最大容量,单位为字节
15 print("server recv:", data)
16 conn.send(data.upper()) #对收到的信息处理,返回到客户端
17
18 server.close() #关闭服务端
1 #客户端
2 import socket
3
4 address = ('localhost', 6666) #写明要发送消息的服务端的地址和端口号
5 client = socket.socket()
6 client.connect(address) #连接服务端
7
8 client.send(b"hell world") #发送信息,注意在python3中socket的发送只支持bytes类型
9 data = client.recv(1024) #等待接收服务端返回的信息
10 print("client recv:", data)
11
12 client.close() #关闭客户端
例二(对上面的代码进行改进,可以挂起多个连接,使每个连接可以进行多次对话且上一个连接断开后下一个连接马上接入):
1 #服务端 2 import socket 3 4 address = ("localhost", 6666) #写明服务端要监听的地址,和端口号 5 server = socket.socket() #生成一个socket对象 6 server.bind(address) #用socket对象绑定要监听的地址和端口 7 server.listen(5) #开始监听 8 9 while True: 10 #一条连接关闭后,接入下一条连接 11 conn,addr = server.accept() #等带新连接接入服务端,返回一个新的socket对象和地址,地址格式同前面格式 12 ''' 13 Wait for an incoming connection. Return a new socket 14 representing the connection, and the address of the client. 15 ''' 16 while True: 17 #使其可以接收多次消息 18 data = conn.recv(1024) #接收信息,写明要接收信息的最大容量,单位为字节 19 # 没收到消息,断开本次连接 20 if not data: 21 break 22 print("server recv:", data) 23 conn.send(data.upper()) #对收到的信息处理,返回到客户端 24 25 server.close() #关闭服务端