1. 程式人生 > >利用Python進行socket網路程式設計,實現樹莓派與Ubuntu(16.04)之間的簡單的網路聊天

利用Python進行socket網路程式設計,實現樹莓派與Ubuntu(16.04)之間的簡單的網路聊天

標題 目標:

採用socket程式設計,完成兩個樹莓派之間、或者樹莓派與Ubuntu系統之間的網路文字通訊(或聊天)

分析:
首先我們需要了解socket程式設計的原理以及它是怎麼實現的。
Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個Socket,並繫結到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原義那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。
Socket又稱"套接字",應用程式通常通過"套接字"向網路發出請求或者應答網路請求,下面這張圖片很好地表述了socket實現的過程。
‘’

圖片來源於百度百科
語言選擇
我所用的是Python,其他語言(c,c++,Java,php等)的網路程式設計應該網上有很多,我個人愛好用Python,剛好最近也在學習Python的一些知識。那我們可以進入到Python官方提供的關於socket函式中去看

https://docs.python.org/3/library/socket.html

現在開始寫程式碼
根據我們的需求:實現兩臺裝置之間的網路聊天。我寫的比較簡單,就是一臺裝置傳送一條訊息,只有接收到訊息後才能再發送(即一人一次只能傳送一條訊息,需對方回覆後再發送第二條訊息)
接下來直接上程式碼,寫的簡單,也沒進行優化,可改度也不大。

伺服器端
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()

然後就可以簡單的聊天了。