python socket編程入門級
阿新 • • 發佈:2018-09-11
數據 bin accept rec host input port 客戶端 list
客戶端
import socket import time sk = socket.socket() # 第一步:創建socket對象 address = (‘127.0.0.1‘, 8080) # 協議是ip+端口(類型元組) sk.connect(address) # 第二步:建立鏈接 while True: inp = input(‘客戶端>>>>>>>>>\n‘) if inp == ‘exit‘: break sk.send(bytes(inp, ‘utf8‘)) # 第三步:請求數據 time.sleep(1) # low方法防止粘包 data = sk.recv(1024) # 接收確認信息 print("接收服務端的數據", str(data, ‘utf8‘)) sk.close()
服務端
import socket # family type # AF_INET,AF_INET6 # AF_UNIX # SOCK_STREAM:: TCP # SOCK_DGRAM :: UDP # sk只負責綁定端口等待鏈接,發送接收消息用conn。 sk = socket.socket() # 默認參數tcp address = (‘127.0.1‘, 8080) sk.bind(address) # 綁定ip協議和端口 sk.listen(3) # 定義最大可以掛起連接數。 print(‘服務的waiting.......‘) while 1: conn, addr = sk.accept() # 等待接收來自客戶端的信息 print(addr) while 1: try: data = conn.recv(1024) except Exception: break if not data: break print(‘接收到來自客戶端的信息......‘, str(data, ‘utf8‘)) inp = input(‘》》》》》》》》‘) conn.send(bytes(inp, ‘utf8‘))
使用多線程版
import socketserver class MyServer(socketserver.BaseRequestHandler): # 重寫父類的方法 def handle(self): print(‘waiting.......‘) while 1: conn = self.request print(self.client_address) while 1: try: data = conn.recv(1024) except Exception: break if not data: break print(‘......‘, str(data, ‘utf8‘)) inp = input(‘》》》》》》》》‘) conn.sendall(bytes(inp, ‘utf8‘)) conn.close() if __name__ == ‘__main__‘: host = ‘127.0.0.1‘ ip = ‘8080‘ server = socketserver.ThreadingTCPServer((host, ip), MyServer)#多線程通話 # 不會出現在一個客戶端結束後,當前服務器端就會關閉或者報錯,而是繼續運行,與其他的客戶端繼續進行通話。 server.serve_forever()
python socket編程入門級