Python網絡編程-Socket簡單通信
阿新 • • 發佈:2018-08-18
... 簡單 我們 ndt NPU 三次握手 啟動 enc 介紹
學習python中使用python進行網絡編程,編寫簡單的客戶端和服務器端進行通信,大部分內容來源於網絡教程,這裏進行總結供以後查閱。
先介紹下TCP的三次握手:
1,簡單的發送消息:
服務器端:
import socket sk = socket.socket() ip_port = ("127.0.0.1", 8888) sk.bind(ip_port) sk.listen(5) print("正在進行等待接受數據...") conn, address = sk.accept() msg = "hello world!" conn.send(msg.encode()) conn.close()
客戶端:
import socket client = socket.socket() ip_port = ("127.0.0.1", 8888) client.connect(ip_port) data = client.recv(1024) print(data.decode())
這裏並不能連續發送消息,一次連接發送消息後程序終止。
2.1,連續的發送消息(TCP方式)
服務器端:
import socket import random sk = socket.socket() ip_port = ("127.0.0.1", 8888) sk.bind(ip_port) sk.listen(5) while True: print("正在進行等待接受數據...") conn, address = sk.accept() msg = "hello world!" conn.send(msg.encode()) while True: data=conn.recv(1024) print(data.decode()) if data==b‘exit‘: break conn.send(data) conn.send(str(random.randint(1,1000)).encode()) conn.close()
客戶端:
import socket client = socket.socket() ip_port = ("127.0.0.1", 8888) client.connect(ip_port) while True: data = client.recv(1024) print(data.decode()) msg_input=input("please input mesage to send...") client.send(msg_input.encode()) if msg_input== b‘exit‘: break data = client.recv(1024) print(data.decode())
使用while函數,來連續的發送消息。
2.2,連續的發送消息(UDP方式)
服務器端:
import socket #定義udp方式 sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) ip_port=("127.0.0.1",8888) sk.bind(ip_port) while True: data=sk.recv(1024) print(data.decode())
客戶端:
#udp import socket sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) ip_port=("127.0.0.1",8888) while True: msg_input=input("please input message to send...") if msg_input==b‘exit‘: break sk.sendto(msg_input.encode(),ip_port) sk.close()
3,多客戶端發送消息(TCP方式)
服務器端:
#tcp import socketserver import random class MyServer(socketserver.BaseRequestHandler): def setup(self): pass def handle(self): conn=self.request msg="hello world!" conn.send(msg.encode()) while True: data= conn.recv(1024) print(data.decode()) if data== b‘exit‘: break conn.send(data) conn.send(str(random.randint(1,1000)).encode()) conn.close() def finish(self): pass if __name__=="__main__": server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer) server.serve_forever()
客戶端:
#tcp import socket client = socket.socket() ip_port = ("127.0.0.1", 8888) client.connect(ip_port) while True: data = client.recv(1024) print(data.decode()) msg_input=input("please input mesage to send...") client.send(msg_input.encode()) if msg_input== b‘exit‘: break data = client.recv(1024) print(data.decode())
啟動服務器端後,服務器端等待客戶端程序連接,我們可以啟動多個客戶端來連接服務器端。
註:內容來源於互聯網
Python網絡編程-Socket簡單通信