Python socket是一个可以实现网络应用的库,可以用来实现数据传输,包括TCP和UDP协议。下面将详细讲解如何使用Python socket实现TCP协议的服务端和客户端数据传输。
实现TCP协议的服务端和客户端数据传输
TCP服务端
- 导入socket库
import socket
- 创建socket对象并指定协议
serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- socket.AF_INET:指定ipv4协议
-
socket.SOCK_STREAM:指定TCP协议
-
绑定IP和端口
serv_sock.bind(('127.0.0.1', 8000))
- 127.0.0.1:本地IP地址
-
8000:自定义的端口号
-
开始监听,并设置最大连接数
serv_sock.listen(5)
-
5:最大连接数
-
等待客户端连接,并返回一个socket对象和客户端地址信息
while True:
conn_sock, conn_addr = serv_sock.accept()
- 接收客户端发送的数据
data = conn_sock.recv(1024)
-
1024:每次最大接收数据量
-
发送数据给客户端
conn_sock.send(b"Hello World!")
- 关闭socket对象
conn_sock.close()
serv_sock.close()
TCP客户端
- 导入socket库
import socket
- 创建socket对象并指定协议
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- socket.AF_INET:指定ipv4协议
-
socket.SOCK_STREAM:指定TCP协议
-
连接服务端地址
client_sock.connect(('127.0.0.1', 8000))
- 127.0.0.1:服务端IP地址
-
8000:服务端自定义的端口号
-
发送数据给服务端
client_sock.send(b"Hello World!")
- 接收服务端发送的数据
data = client_sock.recv(1024)
-
1024:每次最大接收数据量
-
关闭socket对象
client_sock.close()
示例说明
下面给出两条示例说明:
示例1:服务端和客户端通过Python socket实现简单聊天发送消息
服务端代码:
import socket
serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_sock.bind(('127.0.0.1', 8000))
serv_sock.listen(5)
while True:
conn_sock, conn_addr = serv_sock.accept()
print('Connected by', conn_addr)
while True:
data = conn_sock.recv(1024)
if not data: break
print('[Client]', data.decode('utf-8'))
msg = input('[Server] ')
conn_sock.send(msg.encode('utf-8'))
conn_sock.close()
serv_sock.close()
客户端代码:
import socket
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1', 8000))
while True:
msg = input('[Client] ')
client_sock.send(msg.encode('utf-8'))
data = client_sock.recv(1024)
print('[Server]', data.decode('utf-8'))
client_sock.close()
示例2:通过Python socket实现文件传输
服务端代码:
import socket
serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_sock.bind(('127.0.0.1', 8000))
serv_sock.listen(5)
while True:
conn_sock, conn_addr = serv_sock.accept()
print('Connected by', conn_addr)
with open('receive.txt', 'wb') as f:
while True:
data = conn_sock.recv(1024)
if not data: break
f.write(data)
print('Finished receiving')
conn_sock.close()
serv_sock.close()
客户端代码:
import socket
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1', 8000))
with open('send.txt', 'rb') as f:
while True:
data = f.read(1024)
if not data: break
client_sock.send(data)
print('Finished sending')
client_sock.close()
以上就是Python socket实现服务端和客户端数据传输的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python socket如何实现服务端和客户端数据传输(TCP) - Python技术站