socket_基础2_传输大数据
生活随笔
收集整理的這篇文章主要介紹了
socket_基础2_传输大数据
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基礎(chǔ)1中只能通過socket傳輸1次,當(dāng)需要循環(huán)交互或者單個(gè)數(shù)據(jù)超過接收緩沖區(qū)大小后代碼就無(wú)能為力。下面代碼通過實(shí)現(xiàn)簡(jiǎn)單ssh功能來(lái)說(shuō)明如何通過socket傳輸超過接收緩沖區(qū)大小數(shù)據(jù)以及如何同客戶端進(jìn)行交互
server端實(shí)現(xiàn)
1 # _*_ coding:utf-8 _*_ 2 import socket,os 3 server = socket.socket() #創(chuàng)建連接描述符,默認(rèn)使用iv4/tcp 4 server.bind(("localhost",6969)) #指定監(jiān)聽地址和端口,開始等待客戶端連接。 5 server.listen(5) #監(jiān)聽 6 print("服務(wù)端已啟動(dòng)") 7 while True: 8 conn,addr = server.accept() #創(chuàng)建和客戶端交互數(shù)據(jù)的連接 9 print('new conn',conn) 10 while True: 11 date = conn.recv(1024) #1024為接收字節(jié)大小 12 if len(date) == 0: #判斷客戶端是否斷開,若客戶端斷開則接收端接收的數(shù)據(jù)長(zhǎng)度為0 13 print("client is close") 14 break 15 print('recv cmd is::',date.decode('utf-8')) 16 cmd_res = os.popen(date.decode('utf-8')).read() #該命令無(wú)法獲取os返回的異常,使用下面if判斷輸入cmd是否為異常 17 if len(cmd_res) == 0: 18 cmd_res = 'this is a bad command' 19 conn.send(str( len(cmd_res.encode(encoding='utf-8'))).encode(encoding='utf-8')) #發(fā)送命令長(zhǎng)度 20 conn.recv(1024) #為解決粘包問題中間插入一個(gè)接收操作 21 conn.send(cmd_res.encode(encoding='utf-8')) 22 23 24 server.close() #關(guān)閉連接客戶端實(shí)現(xiàn)
# _*_ coding:utf-8 _*_ import socket client = socket.socket() #創(chuàng)建連接描述符,指定socket連接的網(wǎng)絡(luò)層和傳輸層協(xié)議,默認(rèn)使用ipv4/tcp client.connect(("localhost",6969)) #使用連接描述符連接server,server信息以元組形式傳入,包含ip地址和端口號(hào) while True:cmd = input("input your command:")if len(cmd) == 0:continueclient.send(cmd.encode(encoding='utf-8')) #發(fā)送hello world,send只能發(fā)送byte類型,不能發(fā)送字符串。encode默認(rèn)會(huì)將字符串轉(zhuǎn)為byte類型cmd_res_len = client.recv(1024).decode() #接收命令回顯的長(zhǎng)度print("cmd_res_len:",cmd_res_len)client.send(b'i have receive cmd_res_len') #為解決粘包問題,給服務(wù)端發(fā)送響應(yīng)rece_size = 0while rece_size < int(cmd_res_len): #通過此循環(huán)持續(xù)收包print(client.recv(1024).decode())rece_size += 1024client.close()?
轉(zhuǎn)載于:https://www.cnblogs.com/flags-blog/p/9535569.html
總結(jié)
以上是生活随笔為你收集整理的socket_基础2_传输大数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react native android
- 下一篇: 剥开比原看代码(十七):比原是如何显示交