version: python3
TCP
创建服务器
from socket import *
from time import ctime
# 设置HOST,PORT
HOST = ""
PORT = 20000
# 设置缓冲区大小
BUFSIZE = 1024
ADDR = (HOST, PORT)
# 创建服务端socket
tcpServerSock = socket(AF_INET, SOCK_STREAM)
# 绑定到ADDR上
tcpServerSock.bind(ADDR)
#监听, 最大监听数为5
tcpServerSock.listen(5)
while True:
print("waiting for connection...")
# 等待连接
tcpClientSock, addr = tcpServerSock.accept()
print("connected from: ", addr)
# 设置了一个变量error用于区分exit退出
error = False
while True:
# 获取客户端发送的数据
data = tcpClientSock.recv(BUFSIZE)
# 为空时退出循环
if not data:
break
# 接收到exit字样时,退出循环
if data.decode('utf-8').lower() == "exit":
break
# 接收到KeyboardInterrupt or EOFError 的错误信息时,退出循环并将error设为True,用于退出服务器
if data == bytes('Program interrupted by user.', encoding="utf-8") or \
data == bytes('Read beyond end of file.', encoding="utf-8"):
error = True
break
# 发送数据到客户端
tcpClientSock.send(bytes("[{} {}]".format(ctime(), data), encoding="utf-8"))
# 断开客户端连接
tcpClientSock.close()
# 接收到KeyboardInterrupt or EoFError时退出服务器
if error:
break
# 关闭服务器
tcpServerSock.close()
创建客户端
from socket import *
HOST = "127.0.0.1"
PORT = 20000
BUFSIZE = 1024
ADDR = (HOST, PORT)
# 创建客户端socket
tcpClientSock = socket(AF_INET, SOCK_STREAM)
# 连接服务器
tcpClientSock.connect(ADDR)
while True:
try:
data = input(">")
except KeyboardInterrupt or EOFError as e:
data = e.__doc__
# 输入为空时,跳出循环
if not data:
break
tcpClientSock.send(bytes(data, encoding="utf-8"))
data = tcpClientSock.recv(BUFSIZE)
# 接收到数据为空时,跳出循环
if not data:
break
print(data.decode('utf-8'))
tcpClientSock.close()
UDP
创建服务器
from socket import *
from time import ctime
HOST = ""
PORT = 30000
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpServerSock = socket(AF_INET, SOCK_DGRAM)
udpServerSock.bind(ADDR)
while True:
print("waiting for connection...")
data, addr = udpServerSock.recvfrom(BUFSIZE)
udpServerSock.sendto(bytes("[{}] {}".format(ctime(), data), encoding="utf-8"), addr)
print("...received from and returned to: ", addr)
udpServerSock.close()
创建客户端
from socket import *
HOST = "127.0.0.1"
PORT = 30000
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpClientSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = input(">")
if not data:
break
udpClientSock.sendto(bytes(data, encoding="utf-8"), ADDR)
data, ADDR = udpClientSock.recvfrom(BUFSIZE)
if not data:
break
print(data.decode("utf-8"))
udpClientSock.close()