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...