以前一直以為recv預設是一直阻塞的。後來發現並不是這樣。
recv預設是阻塞的,當然也可以使用s.setblocking()或者s.settimeout()。
python socket:
但是當客戶端斷開連線後recv就會變為非阻塞,並返回空的字串
#coding=utf-8
'''created on 2015-7-27
@author: xhw
@explain: pass
'''import socket,time,threading
host = 'localhost'
port = 8080
s = socket.socket(socket.af_inet, socket.sock_stream)
def server():
s.bind((host,port))
s.listen(10)
while 1:
conn,addr = s.accept()
print "connected with %s %s"%(addr[0],addr[1])
t = threading.thread(target = task, args = (conn,addr,))
t.setdaemon(true)
t.start()
def task(conn,addr):
while 1:
#conn.settimeout(10)#設定超時間
ret = conn.recv(1024)
if ret == '':
break
print "ret:",ret
time.sleep(0.2)
print "connected close with %s %s"%(addr[0],addr[1])
conn.close()
if __name__ == '__main__':
server()
client:
#coding=utf-8
'''created on 2015-7-27
@author: xhw
@explain: pass
'''import socket,time
host = 'localhost'
port = 8080
def client():
s = socket.socket(socket.af_inet, socket.sock_stream)
s.connect((host, port))
i = 0
while 1:
if i > 20:
break
s.send("time:%s"%time.strftime('%y-%m-%d %h:%m:%s'))
time.sleep(0.5)
i+=1
s.close()
if __name__ == "__main__":
client()
Tcp 斷開連線
tcp協議規定,對於已經建立的連線,網路雙方要進行四次握手才能成功斷開連線,如果缺少了其中某個步驟,將會使連線處於假死狀態,連線本身占用的資源不會被釋放。網路伺服器程式要同時管理大量連線,所以很有必要保證無用連線完全斷開,否則大量僵死的連線會浪費許多伺服器資源。在眾多tcp狀態中,最值得注意的狀態有...
TCP IP 斷開連線
tcp ip 斷開連線 四次握手 斷開連線其實從我的角度看不區分客戶端和伺服器端,任何一方都可以呼叫close or closesocket 之類 的函式開始主動終止乙個連線。這裡先暫時說正常情況。當呼叫close函式斷開乙個連線時,主動斷開的 一方傳送fin finish報文給對方。有了之前的經驗...
php斷開mysql mysql連線與斷開伺服器
為了連線伺服器,當呼叫mysql時,通常需要提供乙個mysql使用者名稱並且很可能需要乙個 密碼。如果伺服器執行在登入伺服器之外的其它機器上,還需要指定主機名。聯絡管理員以找出進行連線所使用的引數 即,連線的主機 使用者名稱和使用的密碼 知道正確的引數後,可以按照以下方式進行連線 shell mys...