学习笔记(05):Python网络编程并发编程-基于socket实现简单套接字通信
生活随笔
收集整理的這篇文章主要介紹了
学习笔记(05):Python网络编程并发编程-基于socket实现简单套接字通信
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立即學習:https://edu.csdn.net/course/play/24458/296234?utm_source=blogtoedu
1.服務器端
#以打電話通訊為例子進行說明 #導入相應的模塊 import socket#1、設置套接字的類型以及協議(買手機),其實就是設置一個套接字,phone即為一個套接字 #設置為網絡類型的套接字:socket.AF_INET #設置為TCP協議:socket.SOCK_STREAM phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、綁定端口以及制定IP地址(綁定手機卡) #bind(('ip地址',端口))傳入的是一個元組 #端口是0-65550,其中0-1024是給操作系統使用的 phone.bind(('127.0.0.1',8080))#3、監聽端口listen() #表示可掛起的請求的最大數量為5個,如接著一個電話時,另一個電話又打進了,這時候需要將這個電話掛起,等當前的電話結束后再處理后面打進來的這個電話 phone.listen(5)#4、阻塞,等待客戶端的連接accept() res = phone.accept()'''(<socket.socket fd=348, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 65470)>, ('127.0.0.1', 65470))res返回了一個元組,含有兩個元素,第一個元素是套接字對象:<socket.socket fd=348, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 65470)>,第二個是本地地址與端口組成的元素('127.0.0.1', 65470)'''#5、獲得收發消息的套接字 conn,client_addr = res#6、收發消息#1)接收客戶端的請求信息recv() data = conn.recv(1024)#1024表示接收的字節最大量是1024bytes print('這是客戶端的請求數據',data)#2)處理接收的請求后,發送數據send() #將客戶端發送來的小寫字母經過大寫處理后發送返回給客戶端 conn.send(data.upper())#7、關閉接收消息的套接字 conn.close()#8、關閉phone套接字 phone.close()?
2.客戶端
#導入模塊 import socket#1、設置phone套接字 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、連接服務器(打電話),本地地址:127.0.0.1 phone.connect(('127.0.0.1',8080))#3、向服務器發送請求send(),發送的數據不能直接發送字符串,因為要傳送到物理層底層,因此需要轉換成二進制的bytes類型進行發送,只需:發送的數據.encode('utf-8')即可 phone.send('hello'.encode('utf-8'))#4、接收服務器返回來的數據recv() res = phone.recv(1024)#接收小于1024bytes的數據 print('服務器返回來的數據:',res)#5、關閉套接字phone phone.close()?
注:服務器端含有兩個套接字,一個是phone用于綁定、監聽端口,等待客戶端請求,conn用于接收發送數據;而客戶端則是只有一個套接字,phone,用于與服務器端進行通訊
?
總結
以上是生活随笔為你收集整理的学习笔记(05):Python网络编程并发编程-基于socket实现简单套接字通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模板——树状数组求逆序对
- 下一篇: 机器人编程和python的区别_乐高机器