網路程式設計 Python

2022-02-14 18:46:41 字數 3658 閱讀 2921

python網路程式設計

python提供了兩個級別訪問的網路服務

低階別的網路服務支援基本的socket,它提供了標準的bsd sockets api,可以訪問底層作業系統socket介面的全部方法。

高階別的網路服務模組socketserver,它提供了服務中心類,可以簡化網路伺服器的開發。

什麼是socket?

socket函式

python中,我們用socket()函式來建立套接字,語法格式如下:

socket.socket([family[, type[, proto]]])

引數family: 套接字家族可以使af_unix或者af_inet

type: 套接字型別可以根據是面向連線的還是非連線分為sock_stream或者sock_dgram

protocol: 一般不填預設為0

socket物件(內建)方法

函式描述

伺服器端套接字

s.bind()

繫結位址(host,port)到套接字, 在 af_inet下,以元組(host,port)的形式表示位址。

s.listen()

開始 tcp 監聽。backlog 指定在拒絕連線之前,作業系統可以掛起的最大連線數量。該值至少為 1,大部分應用程式設為 5 就可以了。

s.accept()

被動接受tcp客戶端連線,(阻塞式)等待連線的到來

客戶端套接字

s.connect()

主動初始化tcp伺服器連線,。一般address的格式為元組(hostname,port),如果連線出錯,返回socket.error錯誤。

s.connect_ex()

connect()函式的擴充套件版本,出錯時返回出錯碼,而不是丟擲異常

公共用途的套接字函式

s.recv()

接收 tcp 資料,資料以字串形式返回,bufsize 指定要接收的最大資料量。flag 提供有關訊息的其他資訊,通常可以忽略。

s.send()

傳送 tcp 資料,將 string 中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於 string 的位元組大小。

s.sendall()

完整傳送 tcp 資料。將 string 中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料。成功返回 none,失敗則丟擲異常。

s.recvfrom()

接收 udp 資料,與 recv() 類似,但返回值是(data,address)。其中 data 是包含接收資料的字串,address 是傳送資料的套接字位址。

s.sendto()

傳送 udp 資料,將資料傳送到套接字,address 是形式為(ipaddr,port)的元組,指定遠端位址。返回值是傳送的位元組數。

s.close()

關閉套接字

s.getpeername()

返回連線套接字的遠端位址。返回值通常是元組(ipaddr,port)。

s.getsockname()

返回套接字自己的位址。通常是乙個元組(ipaddr,port)

s.setsockopt(level,optname,value)

設定給定套接字選項的值。

s.getsockopt(level,optname[.buflen])

返回套接字選項的值。

s.settimeout(timeout)

設定套接字操作的超時期,timeout是乙個浮點數,單位是秒。值為none表示沒有超時期。一般,超時期應該在剛建立套接字時設定,因為它們可能用於連線的操作(如connect())

s.gettimeout()

返回當前超時期的值,單位是秒,如果沒有設定超時期,則返回none。

s.fileno()

返回套接字的檔案描述符。

s.setblocking(flag)

如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(預設值)。非阻塞模式下,如果呼叫recv()沒有發現任何資料,或send()呼叫無法立即傳送資料,那麼將引起socket.error異常。

s.makefile()

建立乙個與該套接字相關連的檔案

簡單例項:

服務端

#伺服器端

#!/usr/bin/env python

# -*- coding:utf-8 -*-# 收發訊息

import socket #socket模組

buf_size = 1024

#設定緩衝區大小

server_addr = ('

127.0.0.1

', 8888

) #ip和埠構成表示位址

server =socket.socket(socket.af_inet, socket.sock_stream) #生成乙個新的socket物件

server.setsockopt(socket.sol_socket, socket.so_reuseaddr,

1) #設定位址復用

server.bind(server_addr) #繫結位址

server.listen(

5) #監聽, 最大監聽數為5

client, client_addr =server.accept() #接收tcp連線, 並返回新的套接字和位址

print(

'connected by

', client_addr)

while

true :

recv_msg = client.recv(buf_size).decode('

utf-8

') #從客戶端接收資料

print(recv_msg)

send_msg = input('

傳送:

').encode('

utf-8')

client.sendall(send_msg) #傳送資料到客戶端

server.close()

客戶端

#客戶端

#!/usr/bin/env python

# -*- coding:utf-8 -*-import socket, json

buf_size = 1024

#設定緩衝區的大小

server_addr = ('

127.0.0.1

', 8888

) #ip和埠構成表示位址

client =socket.socket(socket.af_inet, socket.sock_stream) #返回新的socket物件

client.connect(server_addr) #要連線的伺服器位址

while

true:

send_msg = input("

please input some string >

").encode('

utf-8')

client.sendall(send_msg) #傳送資料到伺服器

recv_msg =client.recv(buf_size) #從伺服器端接收資料

print(recv_msg)

client.close()

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

python 網路程式設計

今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...

python網路程式設計

網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...