python 控制接收超時

2021-10-09 09:37:55 字數 2219 閱讀 3384

python 測試接收超時:

node2:/root/test#cat connect2.py

# -*- coding: utf-8 -*-

import socket

import time

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

s.settimeout(10)

s.connect(("192.168.137.2",8080))

s.send('20200912bbbbbbbbbbbbbbb20200912')

print s.recv(90)

node2:/root/test#time python connect2.py

traceback (most recent call last):

file "connect2.py", line 9, in print s.recv(90)

socket.timeout: timed out

real 0m10.093s

user 0m0.021s

sys 0m0.008s

node1:/root/test#cat t200.py

# coding = utf-8

# -*- coding:utf-8 -*-

import socket

import time

ip_port = ('192.168.137.2',8080)

bufsize = 9000

send_buf_size = 2

recv_buf_size = 1

s=socket.socket(socket.af_inet,socket.sock_stream)#建立套接字

print("buffer size [before]: %d" % s.getsockopt(socket.sol_socket, socket.so_sndbuf))

print("buffer size [before]: %d" % s.getsockopt(socket.sol_socket, socket.so_rcvbuf))

s.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

s.setsockopt( socket.sol_socket, socket.so_sndbuf, send_buf_size)

s.setsockopt( socket.sol_socket, socket.so_rcvbuf, recv_buf_size)

print 'alter----------------';

print s.getsockopt(socket.sol_socket, socket.so_sndbuf)

print s.getsockopt(socket.sol_socket, socket.so_rcvbuf)

#s.setsockopt(socket.sol_socket, socket.so_reuseaddr, 0)

s.bind(ip_port)#繫結位址

s.listen(5)#監聽鏈結

print('server listening8080...')

while true: #無限等待連線

conn,addr = s.accept() #接受客戶端連線

print(conn)

print(addr)

print('接到來自%s的鏈結'%addr[0])

while true: #通訊迴圈,無限接受客戶端資訊

#print conn.getpeername()

msg = conn.recv(bufsize) #接受訊息的內容

print '***--------------------***'

print msg

if len(msg)==0:break #如果 不加,已連線的客戶端突然斷開,recv不再阻塞,發生死迴圈

print '***--------------------***'

time.sleep(20)

conn.send('response:'+str(len(msg)))

#conn.send(msg.upper())#服務端傳送訊息

conn.close()#關閉鏈結

s.close()#關閉套接字

接收超時也可以通過s.settimeout(10)控制

關於recvfrom接收超時

標籤 socket 2014 08 18 11 07 671人閱讀收藏 舉報 網路程式設計學習心得 recvfrom,這方法如果不特意設定,預設為阻塞模式,如果一直收不到訊息,那麼會一直阻塞在那裡。如何設定阻塞時間,或者說如何設定recvfrom接收超時時間。可以使用setsockopt。setso...

訊號驅動,超時接收

一 訊號驅動。1 訊號驅動原理是什麼?就是使用了系統程式設計中訊號的機制,首先讓程式安裝sigio的訊號處理函式,通過監聽檔案描述符是否產生了sigio訊號,我們就知道檔案描述符有沒有資料到達。如果有資料到達 小明這個客人來了 則系統就會產生了sigio訊號 門鈴響了 我們只需要在訊號處理函式讀取資...

Tcp設定傳送和接收超時

linux和windows下用setsockopt設定so sndtimeo,so rcvtimeo的引數的一點區別 udp的socket在某些情況 如對方關閉時,本地可能sendto不出去資料,然後recvfrom就會被阻塞,這時就需要設定 這兩個引數的值提高程式質量。linux struct t...