服务端:(server1)
import socket sk = socket.socket() # 注册主机 sk.bind( ("127.0.0.1",9000) ) # 参数是元组 # 开启监听 sk.listen() # 三次握手 # conn,addr = sk.accept() ''' conn: <socket.socket fd=480, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9000), raddr=('127.0.0.1', 60879)> addr: ('127.0.0.1', 60879) ''' # print(conn,addr) while True: conn,addr = sk.accept() while True: msg = conn.recv(1024) print(msg.decode("utf-8")) # 服务器发消息 message = input("我要发的数据:>>>") conn.send(message.encode("utf-8")) if message == "q": break # 四次挥手 conn.close() # 退还端口 sk.close()
客户端:(client1)
import socket sk = socket.socket() sk.connect( ("127.0.0.1",9000) ) while True: message = input(">>>:") sk.send(message.encode("utf-8")) # 接收服务器发过的消息 res = sk.recv(1024) if res == b"q": break print(res.decode("utf")) sk.close()
服务端:(server2)
# 服务器 import socketserver import socket class MyServer(socketserver.BaseRequestHandler): def handle(self): # 自定义的逻辑... print("----> 执行这句话") # print(self.request) # print(self.client_address) conn = self.request while True: # 接收消息 msg = conn.recv(1024) print(msg.decode("utf-8")) # pass conn.send(b'world') # 生成一个对象 # ThreadingTCPServer( "ip端口号" ,"自定义的类" ) server = socketserver.ThreadingTCPServer( ("127.0.0.1",9000) , MyServer ) # 循环调用 server.serve_forever() ''' try: # lst = [1, 2, 3] # print(lst[99]) print(333) finally: print(1) print(2) ''' """ try .. finally .. 不论try 代码块里面的代码是不是报错, 都会执行finally这个代码块中的内容. 作用:正常情况,如果报错,后面的代码一律不执行, 但是特殊条件下,又必须在报错的行为中,执行某些代码, 那么这样的代码加到finally当中 """
客户端: client2
# 客户端 import socket sk = socket.socket() sk.connect( ("127.0.0.1",9000) ) while True: # 发消息 sk.send(b"hello") # 接收服务器消息 msg = sk.recv(1024) print(msg.decode("utf-8")) sk.close()