python socket模組之常用函式

2021-10-05 19:39:40 字數 1832 閱讀 5444

1.socket的例項

socket例項化的格式為:

socket(family,type[,protocal])

其中,三個引數中的family是要使用的位址族。

常用的協議族:

af_inet、af_inet6、af_local(或稱af_unix、unix域

socket)、af_route等。預設值為socket.af_inet,通常使用這個默

認值即可。

第二個引數type用來指明socket型別,這裡可以使用的值有三個:

sock_stream,這是tcp型別,保證資料順序及可靠性;

sock_dgram,用於udp型別,不保證資料接收的順序,非可靠連

接;sock_raw,這是原始型別,允許對底層協議如ip或icmp進行直

接訪問,基本不會用到。預設值為sock_stream。

第三個引數指使用的協議,這個引數是可選的。通常賦值「0」,由系統自動選擇。

如果希望初始化乙個tcp型別的socket,就可以使用如下語句。

s=socket.socket()

這條語句實際上相當於

socket.socket(socket.af_inet,socket.sock_stream)。這裡因為使用的都是預設值,所以可以省略掉。

而如果希望初始化乙個udp型別的socket,則可以使用如下語句。

s=socket.socket(socket.af_inet,socket.sock_dgram)

2.socket常用函式

服務端:

bind() :由服務端socket呼叫,將之前穿件的socket與指定ip和埠繫結。如使用socket套接字繫結本機8888埠:

s.bind((『127.0.0.1』, 8888))
listen():開啟監聽模式,可指定最大連線數量,一般設定為5.如

s.listen(5)
客戶端:

connect():連線服務端,引數為(hostname, port)。如

s.connect(("127.0.0.1", 8888))
服務端和客戶端通用函式:

send():用於在使用tcp傳送資料。完整形式為 send(string[,flag]) ,返回值是傳送位元組的數量

sendall() : 與send()函式類似,但可以完整傳送tcp資料。將string中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料。成功返回none,失敗則丟擲異常。

s.sendall(bytes("hello,my friend!",encoding="utf-8"))
recv():接收資料,完整形式為 recv(bufsize[,flag])。資料以字串形式返回,bufsize表示最多可以接收的數量。flag一般不會使用。

obj.recv(1024)
sendto():使用udp傳送資料,完整的形式為 sendto(string[,flag],address),返回值是傳送的位元組數。address是形式為

(ip,port)的元祖,指定遠端位址.

其中 data是包含接收資料的字串, address是傳送資料的套接字位址.

close():關閉socket

Python socket模組應用

socket 本文記錄了一些socket模組的簡單應用,對於具體原理還沒來得及深究。利用socket模組進行埠連線驗證和掃瞄 在linux中常用nc命令來進行遠端埠是否開放的驗證。但是這個命令並不是系統自帶的,所以還比較麻煩。如果利用python自帶的socket模組就可以比較自由地進行埠驗證了。是...

python socket 函式 模組

import socket socket 函式 1,語法格式 socket.socket family type proto family 套接字家族可以使af unix或者af inet type 套接字型別可以根據是tcp連線和udp連線分為sock stream或sock dgram prot...

python socket模組 監控埠

import socket,re 叫做非貪婪匹配,盡可能的少匹配 叫做貪婪匹配,盡可能的多匹配 a fenif1212nfi129f21f res re.compile d findall a print res hosts 1.1.1.1 90 2.2.2.2 8080 127.0.0.1 80 ...