python socket函式詳解

2022-07-05 01:21:18 字數 3991 閱讀 7066

學習了部分有關python socket函式方面的程式設計操作,但是對於socket函式的了解知之甚少,許多函式在用的時候,都需要在借助網上資料,浪費很多的時間,索性花費一點功夫整理一番,好方便自己以後查閱。

主要介紹:socket、bind、listen、connect、accept、send、sendto、recv、recvfrom、close、shutdown。

socket(family,type[,protocal])使用給定的位址族,套接字型別,協議編號(預設為0)來建立套接字

其中:family指明了協議族/域,通常af_inet、af_inet6、af_local等;

type是套介面型別,主要是sock_stream、sock_dgram、sock_raw;

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

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

注意:host == ip

函式描述

s.bind(address)

將套接字繫結到位址,在af_inet下,以tuple(host,prot)的方式傳入,如s.bind((host,port))。

s.listen(backlog)

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

s.accept()

接受tcp連線並返回(conn,address),其中conn是新的套接字物件,可以用來接收和傳送資料,address是連線客戶端的位址。(sock,addr = s.accept)。

函式描述

s.connect(address)

鏈結到address處的套接字,一般address的格式為tuple(host,port),如果鏈結出錯,則返回socket.error錯誤。

s.connect_ex(address)

功能與s.connect(address)相同,但成功返回0,失敗返回errno的值。

函式描述

s.recv(bufsize[,flag])

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

s.recvfrom(bufsize[,flag])

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

s.send(string[,flag])

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

s.sendall(string[,flag])

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

s.sendto(string[,flag],address)

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

s.close()

關閉套接字。

s.getpeername()

返回套接字的遠端位址,返回值通常是乙個tuple(hostaddr,port)。

s.getsockname()

返回套接字自己的位址,返回值通常是乙個tuple(hostaddr,port)。

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

返回套接字選項的值。

s.gettimeout()

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

s.setsockopt(level, option,value)

設定給定套接字選項的值

s.settimeout(timeout)

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

s.setblocking(flag)

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

s.makefile()

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

s.fileno()

返回套接字的檔案描述。

1建立套接字,繫結套接字到本地ip與埠

socket.socket(socket.af_inet,socket.sock_stream)

s.bind(("0.0.0.0",80000))

2開始監聽連線

s.listen()
3進入迴圈,不斷接受客戶端的連線請求

s.accept()
4然後接受傳來的資料,並傳送給對方資料

s.recv()					#接收資料

s.sendall() #傳送資料

5傳輸完畢後,關閉套接字

s.close()
1建立套接字,連線遠端位址

socket.socket(socket.af_inet,socket.sock_stream)

s.connect(("127.0.0.1",8000))

2連線後傳送資料和接受資料

s.sendall()

s.recv()

3傳輸完畢後,關閉套接字

實現客戶端向服務端傳送訊息,**比較簡單,功能單一。

#socket服務端

import socket

server = socket.socket()

#繫結到0.0.0.0:8000埠上

server.bind(("0.0.0.0",8000))#0.0.0.0 同區域網下的其它機器可以通過本機ip來訪問伺服器

server.listen()

#阻塞等待連線

sock,addr = server.accept()

data=""

while true:

temp_data = sock.recv(1024)

if temp_data:

data += temp_data.decode("utf8")

else:

break

print(data)

server.close()

#socket客戶端

import socket

client = socket.socket()

client.connect(("192.168.10.132",8000))#本機ip連線

client.send("666".encode("utf8"))

client.close()

啟動服務端,啟動客戶端,最終效果。

服務端執行效果:

客戶端執行效果:

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模組之常用函式

1 socket的例項 socket例項化的格式為 socket family,type protocal 其中,三個引數中的family是要使用的位址族。常用的協議族 af inet af inet6 af local 或稱af unix unix域 socket af route等。預設值為so...

ngx process options函式詳解

ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...