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