基于TCP协议的套接字编程(简单)
- TCP又被称为流式协议,UDP被称为数据报协议(SOCK_DGRAM)
- 以打电话为例
服务端
import socket
# 1.买一个手机 代表符合TCP/UDP协议 代表使用TCP协议
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定手机号, 也就是ip地址以及端口号,MAC地址会由ip地址解析
phone.bind(('127.0.0.1', 8080)) # 127.0.0.1就是本机ip地址
# 3.开机,半连接池,里面的参数是限制同时接受多少个客户端发送请求
phone.listen(5)
# 4.等待电话打过来
print('wait...')
# 三次握手建立的双向连接,客户端的ip,端口号
conn, client_addr = phone.accept()
print(conn)
print(client_addr)
# 5.通信:收到信息
data = conn.recv(1024)
print(data)
# 6.回复信息
conn.send(data.upper())
# 7.挂电话
conn.close()
# 8.关机
phone.close()
客户端
import socket
# 1. 买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.拨电话
phone.connect(('127.0.0.1', 8080))
# 3.通信,发信息
phone.send('hello'.encode('utf-8'))
# 4.通信,收信息
data = phone.recv(1024)
print(data)
# 5.关机
phone.close()
基于TCP协议的套接字编程(循环)
服务端
import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.bind(('127.0.0.1', 8080))
phone.listen(5)
print('wait...')
while True: # 多人连接的循环
conn, client_addr = phone.accept()
print(client_addr)
while True: # 单人多次对话的循环
try:
data = conn.recv(1024)
if len(data) == 0: # 客户端单方断开连接,服务端就会接收到空数据
break
print(data)
conn.send(data.upper())
except ConnectionResetError:
break
客户端1
import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 8080))
while True:
msg = input('输入要发送的信息:>>>').strip()
phone.send(msg.encode('utf-8'))
data = phone.recv(1024)
print(data)
phone.close()
客户端2
import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 8080))
while True:
msg = input('输入要发送的信息:>>>').strip()
phone.send(msg.encode('utf-8'))
data = phone.recv(1024)
print(data)
phone.close()