学习笔记(06):Python网络编程并发编程-在简单套接字基础上加上通信循环
立即學(xué)習(xí):https://edu.csdn.net/course/play/24458/296235?utm_source=blogtoedu
1.服務(wù)器端
#以打電話通訊為例子進(jìn)行說明 #導(dǎo)入相應(yīng)的模塊 import socket#1、設(shè)置套接字的類型以及協(xié)議(買手機(jī)),其實(shí)就是設(shè)置一個(gè)套接字,phone即為一個(gè)套接字 #設(shè)置為網(wǎng)絡(luò)類型的套接字:socket.AF_INET #設(shè)置為TCP協(xié)議:socket.SOCK_STREAM phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、綁定端口以及制定IP地址(綁定手機(jī)卡) #bind(('ip地址',端口))傳入的是一個(gè)元組 #端口是0-65550,其中0-1024是給操作系統(tǒng)使用的 phone.bind(('127.0.0.1',8080))#3、監(jiān)聽端口listen() #表示可掛起的請(qǐng)求的最大數(shù)量為5個(gè),如接著一個(gè)電話時(shí),另一個(gè)電話又打進(jìn)了,這時(shí)候需要將這個(gè)電話掛起,等當(dāng)前的電話結(jié)束后再處理后面打進(jìn)來的這個(gè)電話 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返回了一個(gè)元組,含有兩個(gè)元素,第一個(gè)元素是套接字對(duì)象:<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)>,第二個(gè)是本地地址與端口組成的元素('127.0.0.1', 65470)'''#5、獲得收發(fā)消息的套接字 conn,client_addr = res#6、收發(fā)消息#1)接收客戶端的請(qǐng)求信息recv() while True:data = conn.recv(1024)#1024表示接收的字節(jié)最大量是1024bytesprint('這是客戶端的請(qǐng)求數(shù)據(jù)',data)#2)處理接收的請(qǐng)求后,發(fā)送數(shù)據(jù)send()#將客戶端發(fā)送來的小寫字母經(jīng)過大寫處理后發(fā)送返回給客戶端conn.send(data.upper())#7、關(guān)閉接收消息的套接字 conn.close()#8、關(guān)閉phone套接字 phone.close()2.客戶端
#導(dǎo)入模塊 import socket#1、設(shè)置phone套接字 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、連接服務(wù)器(打電話),本地地址:127.0.0.1 phone.connect(('127.0.0.1',8080))#3、向服務(wù)器發(fā)送請(qǐng)求send(),發(fā)送的數(shù)據(jù)不能直接發(fā)送字符串,因?yàn)橐獋魉偷轿锢韺拥讓?#xff0c;因此需要轉(zhuǎn)換成二進(jìn)制的bytes類型進(jìn)行發(fā)送,只需:發(fā)送的數(shù)據(jù).encode('utf-8')即可 while True:msg = input("請(qǐng)輸入:")phone.send(msg.encode('utf-8'))#4、接收服務(wù)器返回來的數(shù)據(jù)recv()res = phone.recv(1024)#接收小于1024bytes的數(shù)據(jù)print('服務(wù)器返回來的數(shù)據(jù):',res)#5、關(guān)閉套接字phone phone.close()3.客戶端數(shù)據(jù)
E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/socket編程/客戶端.py
請(qǐng)輸入:12
服務(wù)器返回來的數(shù)據(jù): b'12'
請(qǐng)輸入:wkkk
服務(wù)器返回來的數(shù)據(jù): b'WKKK'
請(qǐng)輸入:我們
服務(wù)器返回來的數(shù)據(jù): b'\xe6\x88\x91\xe4\xbb\xac'
請(qǐng)輸入:111嗯嗯嗯·
服務(wù)器返回來的數(shù)據(jù): b'111\xe5\x97\xaf\xe5\x97\xaf\xe5\x97\xaf\xc2\xb7'
請(qǐng)輸入:
?
4.服務(wù)端數(shù)據(jù)
E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/socket編程/服務(wù)器端.py
這是客戶端的請(qǐng)求數(shù)據(jù) b'12'
這是客戶端的請(qǐng)求數(shù)據(jù) b'wkkk'
這是客戶端的請(qǐng)求數(shù)據(jù) b'\xe6\x88\x91\xe4\xbb\xac'
這是客戶端的請(qǐng)求數(shù)據(jù) b'111\xe5\x97\xaf\xe5\x97\xaf\xe5\x97\xaf\xc2\xb7'
?
5.注:主要的循環(huán)通訊就是將服務(wù)器端和客戶端相應(yīng)的接收消息代碼部分放在While True循環(huán)中,注意不要將套接字的關(guān)閉代碼放在循環(huán)中!!!
?
總結(jié)
以上是生活随笔為你收集整理的学习笔记(06):Python网络编程并发编程-在简单套接字基础上加上通信循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: appium 下载
- 下一篇: LT8619B 产品功能概述 HDMI1