標籤:ddr data 進不去 代碼 輸入 input 發送 內容 python
(1)利用socket進行簡單的連結
Python裡面的socket支援UDP、TCP、以及進程間的通訊,socket可以把我們想要發送的東西封裝起來,發送過去,然後反解成原來的樣子,事實上網路通訊可以理解成都是建立在socket之上,下面的代碼是示範利用socket進行簡單的連結
#要成一次通訊,至少要有兩個人,也就是一個服務端,一個用戶端#服務端‘‘‘必須先開啟著,等待用戶端來進行連結請求,所以自己要先有個地址,也就是IP,也要現有自己的連接埠,沒有連接埠進不去‘‘‘import socketsk= socket.socket()#建立對象sk.bind((‘127.0.0.1‘,9999,))#綁定IP和連接埠,以一個元組的方式傳進去sk.listen(5)#在前面連結已經建立的情況下,後面最多讓五個人等待while True:#讓伺服器端處於可以永遠處於接受用戶端請求的狀態 conn,address=sk.accept() print(conn,address)‘‘‘監聽連接埠,等待以及接受用戶端的請求,有可能會阻塞,主要功能是建立連結,以及接受用戶端資訊conn相當於雙方建立的這個連結,之後互相的通訊要依靠這個連結;address指的的對方的IP和連接埠‘‘‘
下面是用戶端代碼
#用戶端import socketobj =socket.socket()‘‘‘相對於用戶端,制定要連結誰就好了‘‘‘obj.connect((‘127.0.0.1‘,9999,))#連結服務端obj.close()#連結之後關閉
我們先讓伺服器端啟動,然後再啟動用戶端,結果
成功列印出了每次的連結,以及用戶端的IP以及連接埠號碼
(2)基於socket實現簡單的傳送訊息
#伺服器端import socketsk= socket.socket()sk.bind((‘127.0.0.1‘,9999,))#綁定IP和連接埠,以一個元組的方式傳進去sk.listen(5)#在前面連結已經建立的情況下,後面最多讓五個人等待while True:#讓伺服器端處於可以永遠處於接受用戶端請求的狀態 conn,address=sk.accept()#基於conn這個連結發送東西 conn.sendall(bytes(‘終有一天你會成為Python爬蟲工程師的‘,encoding=‘utf-8‘))#Python3要用bytes類型,發送位元組 ‘‘‘建立一次連結,伺服器就發送這個欄位‘‘‘ print(conn,address)
然後用是用戶端代碼
#用戶端import socketobj =socket.socket()‘‘‘相對於用戶端,制定要連結誰就好了‘‘‘obj.connect((‘127.0.0.1‘,9999,))#連結服務端‘‘‘用戶端去連結服務端,如果伺服器端沒有返回訊息給用戶端,則用戶端會一直在recv狀態,一直等待伺服器的訊息‘‘‘result1= obj.recv(2014)#表示最多接收1024個位元組,超過了下次接收、result2= str(result1,encoding=‘utf-8‘)print(result2)obj.close()#連結之後關閉
當啟動一次用戶端建立一次連結,就會收到訊息,結果
(3)基於socket實現聊天機器人
#伺服器端import socketsk= socket.socket()sk.bind((‘127.0.0.1‘,9999,))#綁定IP和連接埠,以一個元組的方式傳進去sk.listen(5)#在前面連結已經建立的情況下,後面最多讓五個人等待while True:#讓伺服器端處於可以永遠處於接受用戶端請求的狀態 conn,address=sk.accept()#基於conn這個連結發送東西 conn.sendall(bytes(‘你好,連結已經建立‘,encoding=‘utf-8‘))#Python3要用bytes類型,發送位元組 # ‘‘‘建立一次連結,伺服器就先發送這個欄位‘‘‘ while True:#讓通訊狀態不中斷 ret_bytes = conn.recv(1024) ret_str = str(ret_bytes,encoding=‘utf-8‘) if ret_str ==‘q‘:#如果收到q,則終止連結 break conn.sendall(bytes(ret_str+‘ 已收到該資訊‘,encoding=‘utf-8‘)) #print(conn,address)
下面是用戶端代碼
#用戶端import socketobj =socket.socket()‘‘‘相對於用戶端,制定要連結誰就好了‘‘‘obj.connect((‘127.0.0.1‘,9999,))#連結服務端‘‘‘用戶端去連結服務端,如果伺服器端沒有返回訊息給用戶端,則用戶端會一直在recv狀態,一直等待伺服器的訊息‘‘‘result1= obj.recv(2014)#表示最多接收1024個位元組,超過了下次接收、result2= str(result1,encoding=‘utf-8‘)print(result2)while True: data = input(‘請輸入你要發送的內容:‘) if data == ‘q‘: obj.sendall(bytes(data, encoding=‘utf-8‘)) print(‘連結斷開‘) break else: obj.sendall(bytes(data,encoding=‘utf-8‘)) rec_byte = obj.recv(1024)#發了之後,接收資訊 rec_str = str(rec_byte,encoding=‘utf-8‘) print(rec_str)obj.close()#連結之後關閉
結果
Python的網路編程socket