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

2022-07-31 22:09:29 字數 3268 閱讀 3276

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()

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中執行服務端**,執行結果:

在cmd中執行客戶端**,執行結果:

Python 實現sftp客戶端(連線遠端伺服器)

import paramiko transport paramiko.transport 106.15.88.182 22 獲取transport例項 transport.connect username root password 123456 建立連線 建立sftp物件,sftpclient是定...

使用tcp select實現客戶端與客戶端的通訊

使用多路復用實現客戶端與客戶端進行通訊 原理 客戶端只要一連上伺服器,立馬給伺服器傳送使用者名稱,然後在服務端將newsocketfd 存放在同乙個結構體中,客戶端先給伺服器傳送資料,然後通過伺服器 給客戶端。伺服器先會查詢對應名字的 newsocketfd 然後向該 newsocketfd 中寫入...

實現乙個簡單redis的客戶端

首先我們需要知道去連線到redis肯定是需要使用到socket 那麼可以建立乙個類專門實現與redis的乙個通訊。其次redis中是有屬於自己的協議的,使用aof進行持久化的時候,是否有看過相應的日誌檔案,用來存放命令,這邊順便說下如何開啟,並檢視該檔案。代表乙個命令的開始操作,3代表該操作後面總共...