Python socket基礎(chǔ)知識(shí)

Python socket編程

正常的socketserver和socketclient

1.socket()函數(shù)

socket()函數(shù)用于創(chuàng)建與制定的服務(wù)提供者綁定的套接字

socket=socket.socket(family,type)

2.bind()函數(shù)

bind()函數(shù)可以將本地地址與一個(gè)Socket綁定在一起,函數(shù)原型如下:

socket.bind(address)

address是一個(gè)雙元素元組(tuple),address=(host,port),host代表主機(jī),port代表端口號(hào)。

3.listen()函數(shù)

listen()函數(shù)可以將套接字設(shè)置為監(jiān)聽(tīng)接入連接的狀態(tài),函數(shù)原型如下:

listen(backlog)

參數(shù)backlog指定等待連接隊(duì)列的最大長(zhǎng)度。

4.accept()函數(shù)
在服務(wù)器端調(diào)用listen()函數(shù)監(jiān)聽(tīng)接入連接后,可以調(diào)用accept()函數(shù)來(lái)等待接受連接請(qǐng)求。accept()的函數(shù)原型如下:

connection,address=socket.accept()

調(diào)用accept()方法后,socket會(huì)進(jìn)入waiting狀態(tài)??蛻粽?qǐng)求連接時(shí),accept()方法會(huì)建立連接并返回服務(wù)器。accept()方法返回一個(gè)含有兩個(gè)元素的元組(connection,address)。第一個(gè)元素connection是新的socket對(duì)象,服務(wù)器必須通過(guò)它與客戶通信;第二個(gè)元素 address是客戶的Internet地址。

5.recv()函數(shù)
調(diào)用recv()函數(shù)可以從已連接的Socket中接收數(shù)據(jù)。

buf=sock.recv(size)

參數(shù)sock是接收數(shù)據(jù)的socket對(duì)象,參數(shù)size制定接收數(shù)據(jù)的緩沖區(qū)的大小,recv()的函數(shù)的返回接收的數(shù)據(jù)。

6.send()函數(shù)

調(diào)用send()函數(shù)可以在已連接的Socket上發(fā)送數(shù)據(jù),send()的函數(shù)原型入下:

sock.send(buf)

參數(shù)sock是在已連接的Socket上發(fā)送數(shù)據(jù).

7.close()函數(shù)
close()函數(shù)用于關(guān)閉一個(gè)Socket,釋放其所占用的所有資源。socket()的函數(shù)圖原型入下:

sock.close()

基本的socket服務(wù)器和客戶端:

#socketserve.py

import socket
import time    

serve=socket.socket(AF_INET,SOCK_STREAM)
serve.bind(('localhost',8080))

serve.listen(5)
print('等待連接')

while True:
  #接收來(lái)自客戶端的連接
  connection,address=serve.accept()
  try:
    connection.settimeout(5)
    buf=connection.recv(1024).decode('utf-8')
    if buf=='1':
      connection.send(b'Welcome to serve')
    else:
      connection.send(b'please go out')
  except s.timeout:
    print('time out')

kkk

#socketclient.py
import socket
import time

client=socket.scoket(AF_INET,SOCK_STREAM)
client.connect(('localhost',8001))

time.sleep(2)
client.send(b'1')
print(client.recv(1024).decode('utf-8'))
client.close()

關(guān)于socket數(shù)據(jù)傳輸過(guò)程中的數(shù)據(jù)形式總結(jié)

a=opc.read('標(biāo)簽名')[0] 
type(a)=float
a=int(a)
a=str(a)
socket.send(a)  send的數(shù)據(jù)必須是字節(jié)或者字符串
opc.read()的結(jié)果返回一個(gè)數(shù)組[數(shù)值,類型...]

通過(guò)struct.pack和unpack可以轉(zhuǎn)換字節(jié)流和python中的數(shù)據(jù)類型。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容