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ù)類型。