利用Python進行socket網路程式設計,實現樹莓派與Ubuntu(16.04)之間的簡單的網路聊天
阿新 • • 發佈:2018-12-08
標題 目標:
採用socket程式設計,完成兩個樹莓派之間、或者樹莓派與Ubuntu系統之間的網路文字通訊(或聊天)
分析:
首先我們需要了解socket程式設計的原理以及它是怎麼實現的。
Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個Socket,並繫結到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原義那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。
Socket又稱"套接字",應用程式通常通過"套接字"向網路發出請求或者應答網路請求,下面這張圖片很好地表述了socket實現的過程。
語言選擇
我所用的是Python,其他語言(c,c++,Java,php等)的網路程式設計應該網上有很多,我個人愛好用Python,剛好最近也在學習Python的一些知識。那我們可以進入到Python官方提供的關於socket函式中去看
現在開始寫程式碼
根據我們的需求:實現兩臺裝置之間的網路聊天。我寫的比較簡單,就是一臺裝置傳送一條訊息,只有接收到訊息後才能再發送(即一人一次只能傳送一條訊息,需對方回覆後再發送第二條訊息)
接下來直接上程式碼,寫的簡單,也沒進行優化,可改度也不大。
伺服器端 import socket import datetime import time host = socket.gethostname() port = 12345 Arr=(host,port) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(Arr) s.listen(1) sock,addr = s.accept() print('Connection Success1') info = sock.recv(1024).decode() while info != 'exit': print('Client:'+info) now='--'+datetime.datetime.ctime(datetime.datetime.now()) send_mes =input()+ str(now) sock.send(send_mes.encode()) if send_mes =='exit': break info = sock.recv(1024).decode() sock.close() s.close()
然後是客戶端`
import socket
s= socket.socket()
host = "這裡是你要連線的主機ip地址"
port = 12345
Arr=(host,port)
s.connect(Arr)
print('Linked Success!')
info = ''
while info != 'exit':
print('Server:'+info)
send_mes=input()
s.send(send_mes.encode())
if send_mes =='exit':
break
info = s.recv(1024).decode()
s.close()
然後就可以簡單的聊天了。