python socket程式設計

2021-06-03 03:19:53 字數 2504 閱讀 7466

python 編寫server的步驟:

1.第一步是建立socket物件。呼叫socket建構函式。如:

socket = socket.socket( family, type )

family引數代表位址家族,可為af_inet或af_unix。af_inet家族包括internet位址,af_unix家族用於同一臺機器上的程序間通訊。type引數代表套接字型別,可為sock_stream(流套接字)和sock_dgram(資料報套接字)。

2.第二步是將socket繫結到指定位址。這是通過socket物件的bind方法來實現的:

socket.bind( address )

由af_inet所建立的套接字,address位址必須是乙個雙元素元組,格式是(host,port)。host代表主機,port代表埠號。如果埠號正在使用、主機名不正確或埠已被保留,bind方法將引發socket.error異常。

3.第三步是使用socket套接字的listen方法接收連線請求。

socket.listen( backlog )

backlog指定最多允許多少個客戶連線到伺服器。它的值至少為1。收到連線請求後,這些請求需要排隊,如果佇列滿,就拒絕請求。

4.第四步是伺服器套接字通過socket的accept方法等待客戶請求乙個連線。

connection, address = socket.accept()

呼叫accept方法時,socket會時入「waiting」狀態。客戶請求連線時,方法建立連線並返回伺服器。accept方法返回乙個含有兩個元素的 元組(connection,address)。第乙個元素connection是新的socket物件,伺服器必須通過它與客戶通訊;第二個元素 address是客戶的internet位址。

5.第五步是處理階段,伺服器和客戶端通過send和recv方法通訊(傳輸 資料)。伺服器呼叫send,並採用字串形式向客戶傳送資訊。

send方法返回已傳送的字元個數。伺服器使用recv方法從客戶接收資訊。呼叫recv 時,伺服器必須指定乙個整數,它對應於可通過本次方法呼叫來接收的最大資料量。recv方法在接收資料時會進入「blocked」狀態,最後返回乙個字元 串,用它表示收到的資料。如果傳送的資料量超過了recv所允許的,資料會被截短。多餘的資料將緩衝於接收端。以後呼叫recv時,多餘的資料會從緩衝區 刪除(以及自上次呼叫recv以來,客戶可能傳送的其它任何資料)。

6.傳輸結束,伺服器呼叫socket的close方法關閉連線。

python編寫client的步驟:

1.建立乙個socket以連線伺服器:socket = socket.socket( family, type )

2.使用socket的connect方法連線伺服器。對於af_inet家族,連線格式如下:

socket.connect( (host,port) )

host代表伺服器主機名或ip,port代表伺服器程序所繫結的埠號。如連線成功,客戶就可通過套接字與伺服器通訊,如果連線失敗,會引發socket.error異常。

3.處理階段,客戶和伺服器將通過send方法和recv方法通訊。

4.傳輸結束,客戶通過呼叫socket的close方法關閉連線。

server.py

if __name__ == '__main__':  

import socket

sock = socket.socket(socket.af_inet, socket.sock_stream)

sock.bind(('localhost', 8001))

sock.listen(5)

while true:

connection,address = sock.accept()

try:

connection.settimeout(5)

buf = connection.recv(1024)

if buf == '1':

connection.send('welcome to server!')

else:

connection.send('please go out!')

except socket.timeout:

print 'time out'

connection.close()

client.py
if __name__ == '__main__':  

import socket

sock = socket.socket(socket.af_inet, socket.sock_stream)

sock.connect(('localhost', 8001))

import time

time.sleep(2)

sock.send('1')

print sock.recv(1024)

sock.close()

Python Socket 程式設計

client import socket,sys if name main 處理引數 argv sys.argv if len argv 3 or len argv 2 and argv 1 print useage argv 0 sys.exit 0 host argv 1 server ip位址...

python socket程式設計

客戶端 author lenovo fromsocketimport host localhost port 2157 bufsize 1024 addr host,port tcpclient socket af inet,sock stream tcpclient.connect addr wh...

Python Socket程式設計

在使用python做socket程式設計時,因為須要使用堵塞 預設 的方式來讀取資料流。此時對於資料的結束每次都須要自己處理。太麻煩。而且網上也沒找到太好的封裝。所以就自己寫了個簡單的封裝。封裝思路 1.客戶端每次請求均傳送乙個 socketrequest 物件,當中封裝詳細的資料。這裡使用json...