1、最簡單的服務端和客戶端
服務端代碼
import socket #網絡編程需要用到socket模塊 server = socket.socket() #創建一個用於監聽連接的Socket對像(服務器端) server.setblocking(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #解決服務重啟時報address already in use server.bind(('127.0.0.1', 9001)) #設置服務端的ip和端口號 server.listen() #開始監聽 conn, addr = server.accept() #接受服務器端發出的消息和地址信息 c_info = conn.recv(1024) #將接受的消息存入到c_info變量中 print(c_info) conn.send(b'hello word') #向客戶端發出消息 conn.close() #關閉連接 server.close() #關閉服務端
客戶端代碼
import socket #網絡編程需要用到socket模塊 client = socket.socket() #創建一個客戶端 client.connect(('127.0.0.1', 9001)) #連接服務端 client.send(b'nice to meet you') #向服務端發消息 s_info = client.recv(1024) #接受服務端發來的消息 print(s_info) client.close() #關閉客戶端
2、可交互的服務端和客服端
服務端代碼
import socket server = socket.socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('127.0.0.1', 9001)) server.listen() conn, addr = server.accept() while True: info=input('>>>') #輸入數據,編碼並發送給客戶端 info=info.encode('utf-8') conn.send(info) c_info = conn.recv(1024).decode('utf-8') #接受客戶端消息並解碼 print(c_info) if c_info == 'bye': #當客戶端發送bye時,服務端給客戶端發送bye並結束循環 conn.send(b'bye') break conn.close() server.close()
客戶端代碼
import socket client = socket.socket() client.connect(('127.0.0.1', 9001)) while True: s_info = client.recv(1024) #接受服務端的消息並解碼 s_info = s_info.decode(encoding='utf-8') print(s_info) if s_info == 'bye': #如果服務端發送的消息為bye,回復bye,結束循環 client.send(b'bye') print('bye_1') break info = input('>>>') #輸入數據,編碼並發送給服務端 info = info.encode('utf-8') client.send(info) client.close()
總結:無論是服務端和客戶邏輯是怎樣的,服務端和客戶端收發要對應。
3、一個服務端+多個客戶端:
服務端代碼
import socket server = socket.socket() server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) server.bind(('127.0.0.1',9002)) server.listen() #while語句作用:(當客戶端關閉后)接受新客戶端的連接,實現服務端不間斷地提供服務。 while True: conn,addr = server.accept() #while語句作用:接受來自客戶端的消息、打印,回復消息;當客戶端的消息中包含‘bye’時,斷開本次連接。 while True: msg = conn.recv(1024).decode('utf-8') print(msg) if 'bye' in msg: #當收到的信息包含bye,給客戶端發送bye,跳出當前while循環 conn.send(b'bye') break info = input('>>>').encode('utf-8') conn.send(info) conn.close() server.close()
客戶端1代碼
import socket client_01 = socket.socket() client_01.connect(('127.0.0.1',9002)) while True: info = input('>>>').encode('utf-8') client_01.send(b'from c1:'+info) msg = client_01.recv(1024).decode('utf-8') print(msg) if msg == 'bye': #當收到bye時,給服務器回復bye,跳出循環。 client_01.send(b'bye') break client_01.close()
客戶端代碼2
import socket client_02 = socket.socket() client_02.connect(('127.0.0.1',9002)) while True: info = input('>>>').encode('utf-8') client_02.send(b'from c2:'+info) msg = client_02.recv(1024).decode('utf-8') print(msg) if msg == 'bye': #當收到bye時,給服務器回復bye,跳出循環。 client_02.send(b'bye') break client_02.close()
代碼親測過,只寫了邏輯實現,改進空間很大,請多指點。