两种版本分别应用两种不同的子线程实现方式
版本一
import socket
import threading
def func(tcp_socket):
while True:
# 接收信息
cilent_socket, cilent_addr = tcp_socket.accept()
print("接收到来自%s的信息" % str(cilent_addr))
file_name = cilent_socket.recv(1024)
a = input()
try:
file = open(file_name, "rb")
while True:
data = file.readline()
if data:
cilent_socket.send(data)
else:
break
except Exception as error:
print("文件不存在")
else:
file.close()
print("已发送文件")
break
cilent_socket.close()
def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置套接字选项 套接字 选项 重用地址 1代表设置 0代表取消
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口
tcp_socket.bind(("", 8888))
# 监听
tcp_socket.listen(128)
for i in range(100):
i = threading.Thread(target=func, args=(tcp_socket,))
i.start()
if __name__ == '__main__':
main()
版本二
import socket
import threading
tcp_socket = None
class MyThread(threading.Thread):
global tcp_socket
def run(self):
while True:
# 接收信息
cilent_socket, cilent_addr = tcp_socket.accept()
print("接收到来自%s的信息" % str(cilent_addr))
file_name = cilent_socket.recv(1024)
try:
file = open(file_name, "rb")
while True:
data = file.readline()
if data:
cilent_socket.send(data)
else:
break
except Exception as error:
print("文件不存在")
else:
file.close()
print("已发送文件")
break
cilent_socket.close()
if __name__ == '__main__':
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置套接字
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定 ip 端口
tcp_socket.bind(("", 8888))
# 监听listen
tcp_socket.listen(128)
for i in range(100):
i = MyThread()
i.start()