python 12 socket 编程
生活随笔
收集整理的這篇文章主要介紹了
python 12 socket 编程
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.socket編程需要兩個(gè)部分 服務(wù)器與客戶(hù)端我們的python中調(diào)用 socket包就不需要自己寫(xiě)協(xié)議了(socket編程中windows 與Linux中的效果是完全不相同了,次代碼最好是放在Linux上運(yùn)行)
# _*_coding:utf-8_*_ # /usr/bin/env python3 # Author:book Miki# 服務(wù)器import socket server = socket.socket() # 聲明socket類(lèi)型,同時(shí)生成socket連接對(duì)象 server.bind(('localhost', 6969)) # 綁定要監(jiān)聽(tīng)的端口此時(shí)綁定的是本地 server.listen() # 監(jiān)聽(tīng) 括號(hào)里面的就是最大允許鏈接 print('等待電話(huà)打進(jìn)來(lái)') coon, addr = server.accept() # 等待 (此時(shí)上面加一個(gè)while 就可以多個(gè)電話(huà)打進(jìn)來(lái)并且進(jìn)行通話(huà)) # coon 就是客戶(hù)端連過(guò)來(lái)而在服務(wù)器端為其生成的一個(gè)連接實(shí)例 # addr 就是地址 print('電話(huà)打進(jìn)來(lái)了') print(coon, addr) # 將coon 與addr 顯示出來(lái) while True: # 此時(shí)就可以一直不停的發(fā)送數(shù)據(jù)了, 此時(shí)的效果就是一個(gè)電話(huà)可以無(wú)阻礙的通話(huà)# 如果此時(shí)沒(méi)有true的話(huà)就只能接收一次了data = coon.recv(1024) # 接收數(shù)據(jù)print('recv:', data.decode()) # 此時(shí)注意我們需要吧接收的數(shù)據(jù)解碼,因?yàn)榘l(fā)過(guò)來(lái)的是byte類(lèi)型coon.send(data.upper()) # 將數(shù)據(jù)里面的字母轉(zhuǎn)化為大寫(xiě)發(fā)送server.close()2.客戶(hù)端
# _*_coding:utf-8_*_ # /usr/bin/env python3 # Author:book Miki# 客戶(hù)端import socket client = socket.socket() # 聲明socket類(lèi)型,同時(shí)生成socket連接對(duì)象 client.connect(('localhost', 6969)) # 連接 while True:ccc = input('>>:')if ccc == '': # 判斷是否為空continueclient.send(ccc.encode('utf-8')) # 發(fā)送byte類(lèi)型data = client.recv(1024) # 接收返回print(data.decode()) # 解碼?
那下面我們可以了解一下 完整的程序了?
# _*_coding:utf-8_*_ # /usr/bin/env python3 # Author:book Miki# 第一步1.import 模塊 然后實(shí)例一個(gè)模塊 若是服務(wù)器的話(huà)要綁定 在監(jiān)聽(tīng),然后等待(返回兩個(gè)值) 然后接收然后在發(fā)送 import os import socketserver = socket.socket() server.bind(('localhost', 9999)) # 綁定地址 server.listen() # 監(jiān)聽(tīng) print('等待電話(huà)') while True:con, addr = server.accept()print('電話(huà)來(lái)了')while True:data = con.recv(1024) # 接收數(shù)據(jù)if not data:print('客戶(hù)端已斷開(kāi)')breakprint(data.decode())cmd_res = os.popen(data.decode()).read()con.send(str(len(cmd_res)).encode('utf-8'))if len(cmd_res) == 0:cmd_res = 'cmd_res has no thing....'client_re = con.recv(1024) # 此處的精妙(隔開(kāi)兩個(gè)send)con.send(cmd_res.encode('utf-8')) # 返回?cái)?shù)據(jù)server.close() # 關(guān)閉# socker粘包(兩個(gè)send連在一起緩沖區(qū)) 例如 # con.send(str(len(cmd_res)).encode('utf-8')) # con.send(cmd_res.encode('utf-8'))# 此時(shí)系統(tǒng)將兩個(gè)send當(dāng)作一個(gè)發(fā)。就需要在中間加一個(gè)client_re = con.recv(1024) 來(lái)等待 就可以做到 # 也就是等到客戶(hù)端確認(rèn)2.2客戶(hù)端
# _*_coding:utf-8_*_ # /usr/bin/env python3 # Author:book Miki# 客戶(hù)端 第一步導(dǎo)入模塊,然后實(shí)例化一個(gè) 然后鏈接,然后發(fā)送 然后接收反回import socketclient = socket.socket() client.connect(('localhost', 9999)) while True:data = input('>>:').strip()if len(data) == 0:continueclient.send(data.encode('utf-8'))re_size = client.recv(1024).decode()print(re_size)client.send(b'True')re_cmd_two = 0print('re_cmd_two:', type(re_cmd_two))print('re_size: ', type(re_size))print('大小為:', re_size)while re_cmd_two <= int(re_size):re_cmd_one = client.recv(1024)print(re_cmd_one.decode())re_cmd_two = re_cmd_two + len(re_cmd_one.decode())print(re_cmd_two)print(re_cmd_two)?
轉(zhuǎn)載于:https://www.cnblogs.com/BookMiki/p/9999000.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的python 12 socket 编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pm2自动部署
- 下一篇: 自动化测试(三)如何用python写一个