import socket
class baseSocket:
def service(host:str,port:int,maxSuspend:int)->socket:
service_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建 socket 对象
service_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 允许socket地址复用,防止出现 address alread use 问题
service_socket.bind((host,port))
service_socket.listen(maxSuspend)
return service_socket
def client(host:str,port:int):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
return client
服务端
import tcpSocket
import socket
import threading
def connectTask(clientSocket,clientAddr):
print(f"连接地址为{clientAddr}")
while True:
recvData = clientSocket.recv(1024)
if not recvData:
exit(0)
print(recvData.hex())
clientSocket.send(recvData)
if __name__ == "__main__":
host = socket.gethostname()
port = 8081
maxlisten = 5
service = tcpSocket.baseSocket.service(host,port,maxlisten)
while True:
clientSocket,clientAddr = service.accept()
thd = threading.Thread(target=connectTask, args=(clientSocket, clientAddr))
thd.daemon=True #设置daemon=True会标记其为守护线程,如果剩下的线程只有守护线程时,整个python程序都会退出
thd.start()
客户端
import tcpSocket
import socket
if __name__ == "__main__":
host = socket.gethostname()
port = 8081
clientSocket = tcpSocket.baseSocket.client(host,port)
while True:
sendData = bytes.fromhex(input("输入发送给服务端的十六进制数据:"))
clientSocket.send(sendData)
exitflag =input("输入[q]退出,其他继续")
if('q' == exitflag):
exit(0)