1. 程式人生 > 程式設計 >python 實現客戶端與服務端的通訊

python 實現客戶端與服務端的通訊

函式介紹

Socket物件方法:

服務端:

函式 描述
.bind() 繫結地址關鍵字,AF_INET下以元組的形式表示地址。常用bind((host,port))
.listen() 監聽TCP,可以掛起的最大連線數,該值至少為1,一般設為5即可
.accept() 被動接受TCP客戶端的連線

客戶端:

函式 描述
.connect() 初始化伺服器連線
.connect_ex() 是對connect()函式的擴充套件,當出錯時返回出錯碼,不報異常

其它函式:

函式 描述
.recv() 接收資料,資料以字串的形式返回,bufsize指定接收的最大資料量。
.send() 傳送資料,將string中的資料傳送到連線的套接字,返回值是要傳送的位元組數量,通常使用.encode()函式對資料進行轉碼
.senddall() 傳送完整的資料,在返回之前會嘗試傳送所有資料,成功返回None,失敗則丟擲異常。
.recvfrom() 與recv()函式類似,不同的是返回值是(data,address),其中data是包含接收資料的字串,address是傳送資料的套接字地址。
.sendto() 傳送UDP資料,將資料傳送到套接字,形式是(ipaddr,port)的元組。
.close() 關閉套接字

服務端

使用socket函式來建立一個socket物件,並設定一個socket服務,然後通過bind(hostname,port)函式來指定一個埠,使用socket物件的accept方法,等待客戶端的連線,並返回connection物件。

具體步驟為:

建立服務端套接字
serversocket=socket()
把地址繫結到套接字
serversocket.bind()
對連線進行監聽
serversocket.listen()
使用一個while進行迴圈,並接收客戶端的連線
while True:
 serverclient=serversocket.accept()
 while True:
   #接收已傳送
   serverclient.recv()
   serverclient.send()
   #關閉客戶端套接字
   serverclient.close()
關閉服務端套接字
serversocket.close()

具體程式碼實現:

import socket
import sys
import time

serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()#獲取本地主機名
port=9999
#繫結埠號
serversocket.bind((host,port))

#設定最大連線數
serversocket.listen(5)
while True:
  print('伺服器啟動,監聽客戶端連結')
  clientsocket,addr=serversocket.accept()
  print('連結地址:%s' % str(addr))
  while True:
    try:
      data=clientsocket.recv(1024)
    except Exception:
      print('斷開的客戶端:',addr)
      break
    print('客戶端傳送內容:',data.decode('utf-8'))
    reply=input('回覆:').strip()
    if not reply:
      break
    msg=time.strftime('%Y-%m-%d %X')#獲取結構化時間戳
    msg1='[%s]:%s'% (msg,reply)
    clientsocket.send(msg1.encode('utf-8'))
  clientsocket.close()
serversocket.closel()

實現功能:通過while實現迴圈接收客戶端傳送的資料,並對客戶端傳送的資料進行顯示並返回給客戶端資料,返回給客戶端的資料資訊後加入時間戳。

客戶端

建立一個客戶端用來連線以上服務的的服務,使用socket.connect()方法開啟一個TCP連線到主機,連線後可以從服務端獲取資料,在操作完成後關閉連線。 具體步驟為: ``` 建立客戶端的套接字 client=socket() 嘗試連線伺服器 client.connect() 傳送並接收資料 client.send() client.recv() 關閉客戶端套接字 client.close() ``` **具體程式碼實現:**

import socket
import sys


s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()
port=9999
s.connect((host,port))
while True:
  data= input('>>').strip()
  if not data:
    break
  s.send(data.encode('utf-8'))
  msg=s.recv(1024)
  if not msg:
    break
  print(msg.decode('utf-8'))
s.close()

測試

使用cmd命令列中開啟到程式碼所在檔案目錄,執行python 服務端檔名.py,再另開啟一個cmd命令介面執行 python 客戶端檔名.py
在pycharm中執行服務端程式碼,執行結果:

python 實現客戶端與服務端的通訊

在cmd中執行客戶端程式碼,執行結果:

python 實現客戶端與服務端的通訊

以上就是python 實現客戶端與服務端的通訊的詳細內容,更多關於python 客戶端與服務端的資料請關注我們其它相關文章!