Python網(wǎng)絡(luò)編程之TCP套接字簡(jiǎn)單用法示例
本文實(shí)例講述了Python網(wǎng)絡(luò)編程之TCP套接字簡(jiǎn)單用法。分享給大家供大家參考,具體如下:
上學(xué)期學(xué)的計(jì)算機(jī)網(wǎng)絡(luò),因?yàn)橹斑€未學(xué)習(xí)python,而java則一知半解,C寫起來(lái)又麻煩,所以一直都沒(méi)有真正實(shí)現(xiàn)過(guò)TCP套接字編程。
最近學(xué)習(xí)了python,而用它來(lái)寫套接字又十分方便簡(jiǎn)單,所以當(dāng)然要試一試咯。
下面根據(jù)代碼來(lái)介紹一下最簡(jiǎn)單的tcp程序,由客戶端輸入數(shù)據(jù),發(fā)送給服務(wù)器,服務(wù)器加上時(shí)間后返回給客戶端
#!/usr/bin/python
'test TCP server'
from socket import * #套接字所需要的模塊
from time import ctime #時(shí)間模塊
HOST = '' #主機(jī)名,為空,表示可以綁定在任何有效的地址上。
PORT = 21567 #隨機(jī)選的可用端口
BUFSIZ = 1024 #發(fā)送數(shù)據(jù)的緩沖區(qū)
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM) #第一個(gè)參數(shù)是socket_family,此處用常用的AF_INET,第二個(gè)參數(shù)是流套接字,即創(chuàng)建的是tcp
tcpSerSock.bind(ADDR) #套接字與地址綁定
tcpSerSock.listen(5) #開(kāi)始監(jiān)聽(tīng),參數(shù)表示允許的最大連接數(shù)
while True:
print 'waiting for connection...'
tcpCliSock, addr = tcpSerSock.accept() #打開(kāi)大門等待客人,accept返回一個(gè)元組(connection,address)。第一個(gè)元素是新的socket對(duì)象,服務(wù)器必須通過(guò)它與客戶通信;第二個(gè)是客戶的地址。
print '...connected from:',addr
while True:
data = tcpCliSock.recv(BUFSIZ) #洗耳恭聽(tīng),把客人的話記錄到data中
if not data: #客人話說(shuō)完了,送客
break
tcpCliSock.send('[%s] %s' %(ctime(), data)) #發(fā)送當(dāng)前時(shí)間,以及數(shù)據(jù)給客人
tcpCliSock.close() #送客,關(guān)閉與該客人通信的套接字
tcpSerSock.close() #因?yàn)樯厦媸撬姥h(huán),此處不是必須的,只是提醒大家離開(kāi)的時(shí)候務(wù)必要關(guān)門!
上面用到了兩個(gè)套接字,第一個(gè)tcpSerSock稱為歡迎套接字,第二個(gè)tcpCliSock才是真正負(fù)責(zé)與客戶端通信的套接字,這樣做的好處是,一個(gè)服務(wù)器可以同時(shí)接待多個(gè)客人。
下面則是客戶端的代碼,非常簡(jiǎn)單:
#!/usr/bin/python
'test tcp client'
from socket import *
HOST = 'localhost' #因?yàn)槲沂窃谕慌_(tái)機(jī)器上運(yùn)行,所以是localhost,不同主機(jī)的話,此處需要改成服務(wù)器地址
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM) #客戶端只需要一個(gè)套接字
tcpCliSock.connect(ADDR) #發(fā)起連接
while True:
data = raw_input('>')
tcpCliSock.send(data) #發(fā)送數(shù)據(jù)
if not data:
break
data = tcpCliSock.recv(BUFSIZ) #接收數(shù)據(jù)
print data
tcpCliSock.close()
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】
- Python socket 套接字實(shí)現(xiàn)通信詳解
- python使用原始套接字發(fā)送二層包(鏈路層幀)的方法
- python 基于TCP協(xié)議的套接字編程詳解
- Python socket套接字實(shí)現(xiàn)C/S模式遠(yuǎn)程命令執(zhí)行功能案例
- Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法示例
- python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能
- Python網(wǎng)絡(luò)編程 Python套接字編程
- 詳解python3中socket套接字的編碼問(wèn)題解決
- 淺析Python中的套接字編程
相關(guān)文章
PyTorch 解決Dataset和Dataloader遇到的問(wèn)題
今天小編就為大家分享一篇PyTorch 解決Dataset和Dataloader遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
解決tensorflow1.x版本加載saver.restore目錄報(bào)錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決tensorflow1.x版本加載saver.restore目錄報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
可視化pytorch 模型中不同BN層的running mean曲線實(shí)例
這篇文章主要介紹了可視化pytorch 模型中不同BN層的running mean曲線實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
pytorch中tensorboard安裝及安裝過(guò)程中出現(xiàn)的常見(jiàn)錯(cuò)誤問(wèn)題
這篇文章主要介紹了pytorch中tensorboard安裝及安裝過(guò)程中出現(xiàn)的常見(jiàn)錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python統(tǒng)計(jì)一個(gè)文本中重復(fù)行數(shù)的方法
這篇文章主要介紹了python統(tǒng)計(jì)一個(gè)文本中重復(fù)行數(shù)的方法,涉及針對(duì)Python中dict對(duì)象的使用及相關(guān)本文的操作,具有一定的借鑒價(jià)值,需要的朋友可以參考下2014-11-11
機(jī)器學(xué)習(xí)10大經(jīng)典算法詳解
這篇文章主要為大家詳細(xì)介紹了機(jī)器學(xué)習(xí)10大經(jīng)典算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Python實(shí)現(xiàn)在Excel文件中寫入圖表
這篇文章主要為大家介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)在Excel文件中寫入一個(gè)比較簡(jiǎn)單的圖表,文中的實(shí)現(xiàn)方法講解詳細(xì),快動(dòng)手嘗試一下吧2022-05-05
淺談Python數(shù)學(xué)建模之整數(shù)規(guī)劃
整數(shù)規(guī)劃并不一定是線性規(guī)劃問(wèn)題的變量取整限制,對(duì)于二次規(guī)劃、非線性規(guī)劃問(wèn)題也有變量取整限制而引出的整數(shù)規(guī)劃。但在數(shù)學(xué)建模問(wèn)題中所說(shuō)的整數(shù)規(guī)劃,通常是指整數(shù)線性規(guī)劃。整數(shù)規(guī)劃與線性規(guī)劃的差別只是變量的整數(shù)約束。選擇簡(jiǎn)單通用的編程方案,讓求解器去處理吧2021-06-06
Python?ORM數(shù)據(jù)庫(kù)框架Sqlalchemy的使用教程詳解
對(duì)象關(guān)系映射(Object?Relational?Mapping,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。本文主要介紹了其使用的相關(guān)資料,感興趣的小伙伴可以學(xué)習(xí)一下2022-10-10

