天天看點

python socket通信_Python實作Socket通信的簡單例子

1、簡述socket原理

socket又稱套間字或者插口,是網絡通信中必不可少的工具。有道是:“無socket,不網絡”。由于socket最早在BSD Unix上使用,而Unix/Linux所奉為經典的至高哲學是“一切皆是檔案”。是以socket在使用時也是完全符合這個哲學的,它涉及到listen()、bind()、accept()、write()/read()、close()等基本的類似于檔案操作的功能函數。

上述Socket功能函數是從傳輸層協定TCP或者UDP中抽象出來的,一個基本的socket通信可以通過固定的功能函數實作。這裡插一句,IP協定是工作在網絡層的。

2、socket通信建立過程(以用戶端為例)

首先:建立Socket,涉及到的主要參數有:domain、type、protocal。

domain是協定域,其中AF_INET->IPv4;AF_INET6->IPv6 。

type對應socket類型,SOCK_STREAM->TCP;SOCK_DGRAM->UDP。

protocol是IPPROTO_TCP,若傳入0,則會根據第二個參數type,自動選擇合适的參數。

其次,連接配接到伺服器,主要參數:

用戶端socket

指向資料結構socketaddr的指針,其中包括目的端口和IP位址

結構體資料長度

再次,發送資料到伺服器,主要參數:

用戶端socket

發送内容位址

發送内容長度

發送方式标志,一般為0

又再次,從伺服器接受資料,主要參數:

用戶端socket

接受内容緩沖區位址

接受内容緩沖區長度

接受方式,0表示阻塞,必須等待伺服器傳回資料傳回值,若成功,則傳回讀入的位元組數,失敗則 傳回SOCKET_ERROR。

最後,關閉socket即可。

3、python 實作socket通信代碼執行個體

首先,伺服器端:

from socket import *

from time import ctime

HOST = ''

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST,PORT)

tcpSerSock = socket(AF_INET,SOCK_STREAM)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)

while True:

print('waiting for connection...')

tcpCliSock, addr = tcpSerSock.accept()

print('...connnecting from:', addr)

while True:

data = tcpCliSock.recv(BUFSIZ)

if not data:

break

#tcpCliSock.send('[%s] %s' %(bytes(ctime(),'utf-8'),data))

tcpCliSock.send(('[%s] %s' % (ctime(), data)).encode())

tcpCliSock.close()

tcpSerSock.close()

其次,用戶端:

from socket import *

HOST = '127.0.0.1' # or 'localhost'

PORT = 21567

BUFSIZ =1024

ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)

tcpCliSock.connect(ADDR)

while True:

data1 = input('>')

#data = str(data)

if not data1:

break

tcpCliSock.send(data1.encode())

data1 = tcpCliSock.recv(BUFSIZ)

if not data1:

break

print(data1.decode('utf-8'))

tcpCliSock.close()

4、結果展示

伺服器端

python socket通信_Python實作Socket通信的簡單例子

用戶端

python socket通信_Python實作Socket通信的簡單例子

轉載位址:https://blog.csdn.net/su_bao/article/details/80380465