欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 網(wǎng)絡(luò)編程詳解及簡(jiǎn)單實(shí)例

 更新時(shí)間:2017年04月25日 16:11:25   投稿:lqh  
這篇文章主要介紹了python 網(wǎng)絡(luò)編程詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下

python 網(wǎng)絡(luò)編程詳解

網(wǎng)絡(luò)編程的專利權(quán)應(yīng)該屬于Unix,各個(gè)平臺(tái)(如windows、Linux等)、各門語(yǔ)言(C、C++、Python、Java等)所實(shí)現(xiàn)的符合自身特性的語(yǔ)法都大同小異。在我看來(lái),懂得了Unix的socket網(wǎng)絡(luò)編程,其他的形式的網(wǎng)絡(luò)編程方法也就知道了。這句話說(shuō)得還不太嚴(yán)謹(jǐn)。準(zhǔn)確的應(yīng)該說(shuō)成懂得了socket編程的原理,網(wǎng)絡(luò)編程也就知道了,不同之處就在于每個(gè)平臺(tái),每個(gè)語(yǔ)言都有自己專享的語(yǔ)法,我們直接靈活套用就行了。

下面是用python實(shí)現(xiàn)的最基本的網(wǎng)絡(luò)編程的例子,即依托于客戶端-服務(wù)器的架構(gòu),實(shí)現(xiàn)客戶端與服務(wù)器之間的單向“數(shù)據(jù)流通”。我們分別用兩個(gè)方法來(lái)實(shí)現(xiàn),一個(gè)方法是最原始的socket編程,另一個(gè)方法是利用python的面向?qū)ο髮?duì)第一種方法進(jìn)行封裝實(shí)現(xiàn),目的是減少實(shí)現(xiàn)透明性,便于快速開(kāi)發(fā)。

要求:客戶端輸入數(shù)據(jù),發(fā)送到服務(wù)端,服務(wù)器端生成(時(shí)間戳+數(shù)據(jù))的封裝數(shù)據(jù)回應(yīng)客戶端。由于socket編程包括兩種:面向連接的和無(wú)連接的,這兩種分別對(duì)應(yīng)TCP數(shù)據(jù)流和UDP數(shù)據(jù)報(bào)文。所以,我們兩種方法都進(jìn)行實(shí)現(xiàn)。

一、Python socket編程

面向連接的TCP socket編程:

# -*- coding: utf-8 -*-
 3 from socket import *
from time import ctime 

# Address and Port
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)

# BuffSize
BUFSIZ = 1024

# build socket
tcpSerSock = socket(AF_INET, SOCK_STREAM)
# bind socket
tcpSerSock.bind(ADDR)
# listen 5 client 
tcpSerSock.listen(5)

try:
  while True:
    print 'waiting for connection...'
    # build client socket
    tcpCliSock, addr = tcpSerSock.accept()
    print '...connect from:', addr

    # accept data and process
    while True:
      data = tcpCliSock.recv(BUFSIZ)
      if not data:
        break
      tcpCliSock.send('[%s] %s' % (ctime(), data))

      # close client socket 
      tcpCliSock.close()
except EOFError, KeyboardInterrupt:
  tcpSerSock.close()
# -*- coding:utf-8 -*-

from socket import *

# Address and Port 
HOST = '127.0.0.1'
PORT = 21567
ADDR = (HOST, PORT)

# BufferSize
BUFSIZ = 1024

#build socket 
tcpCliSocket = socket(AF_INET, SOCK_STREAM)
tcpCliSocket.connect(ADDR)

while True:
  data = raw_input('> ')
  if not data:
    break
  # send data
  tcpCliSocket.send(data)
  # recv data
  data = tcpCliSocket.recv(BUFSIZ)
  if not data:
    break
  # show data
  print data
tcpCliSocket.close()

無(wú)連接的UDP socket編程

# -*- coding: utf-8 -*-

from socket import *
from time import ctime 

# Address and Port 
HOST = ''
PORT = 8000
ADDR = (HOST, PORT)

# BufferSize
BUFFSIZE = 1024
# build socket
udpSerSock = socket(AF_INET, SOCK_DGRAM)
# bind socket
udpSerSock.bind(ADDR)

try:
  while True:
    print 'waiting the message...'
    data, addr = udpSerSock.recvfrom(BUFFSIZE)
    print 'received the message: '+data+' from: ', addr
    udpSerSock.sendto('[%s] %s' % (ctime(), data), addr)
except EOFError, KeyboardInterrupt:
  udpSerSock.close()
# -*- coding: utf-8 -*-

from socket import *

# Address and Port 
HOST = 'localhost'
PORT = 8000
ADDR = (HOST, PORT)

# BufferSize
BUFSIZ = 1024

# build socket 
udpCliSock = socket(AF_INET, SOCK_DGRAM)

while True:
  data = raw_input('> ')
  udpCliSock.sendto(data, ADDR)
  data = udpCliSock.recvfrom(BUFSIZ)
  if not data:
    break
  print data 
udpCliSock.close()

二、基于封裝類SocketServer的網(wǎng)絡(luò)編程

# -*- coding: utf-8 -*-

from SocketServer import TCPServer as TCP, StreamRequestHandler as SRH 
from time import ctime 

# Address and Port
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)

# BuffSize
BUFSIZ = 1024

# build RequestHandler
class MyRequestHandler(SRH):
  def handle(self):
    print '...connected from: ', self.client_address
    self.wfile.write('[%s] %s' % (ctime(), self.rfile.readline()))

# build TCPServer
TCPServ = TCP(ADDR, MyRequestHandler)
print 'waiting for connection...'
# loop to process
TCPServ.serve_forever()
# -*- coding:utf-8 -*-

from socket import *

# Address and Port 
HOST = '127.0.0.1'
PORT = 21567
ADDR = (HOST, PORT)

# BufferSize
BUFSIZ = 1024

while True:
  # note: SocketServer 的請(qǐng)求處理器的默認(rèn)行為是接受連接,
  # 得到請(qǐng)求,然后就關(guān)閉連接,所以需要多次連接
  tcpCliSock = socket(AF_INET, SOCK_STREAM)
  tcpCliSock.connect(ADDR)

  # process data
  data = raw_input('> ')
  if not data:
    break
  tcpCliSock.send('%s\r\n' % data)

  data = tcpCliSock.recv(BUFSIZ)
  if not data:
    break
  print data.strip()
  tcpCliSock.close()

感謝閱讀,希望能幫助大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Python?queue雙端隊(duì)列模塊及用法小結(jié)

    Python?queue雙端隊(duì)列模塊及用法小結(jié)

    雙端隊(duì)列是一種具有隊(duì)列和棧性質(zhì)的線性數(shù)據(jù)結(jié)構(gòu),本文主要介紹了Python?queue雙端隊(duì)列模塊及用法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • python SQLAlchemy的Mapping與Declarative詳解

    python SQLAlchemy的Mapping與Declarative詳解

    這篇文章主要介紹了python SQLAlchemy的Mapping與Declarative詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解Python打包分發(fā)工具setuptools

    詳解Python打包分發(fā)工具setuptools

    這篇文章主要介紹了Python打包分發(fā)工具setuptools的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 關(guān)于pandas中的.update()方法解析

    關(guān)于pandas中的.update()方法解析

    這篇文章主要介紹了關(guān)于pandas中的.update()方法解析,在Pandas中,update()方法用于將一個(gè)DataFrame或Series對(duì)象中的值更新為另一個(gè)DataFrame或Series對(duì)象中的對(duì)應(yīng)值,需要的朋友可以參考下
    2023-07-07
  • pyqt 實(shí)現(xiàn)在Widgets中顯示圖片和文字的方法

    pyqt 實(shí)現(xiàn)在Widgets中顯示圖片和文字的方法

    今天小編就為大家分享一篇pyqt 實(shí)現(xiàn)在Widgets中顯示圖片和文字的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 使用Python的web.py框架實(shí)現(xiàn)類似Django的ORM查詢的教程

    使用Python的web.py框架實(shí)現(xiàn)類似Django的ORM查詢的教程

    這篇文章主要介紹了使用Python的web.py框架實(shí)現(xiàn)類似Django的ORM查詢的教程,集成的ORM操作數(shù)據(jù)庫(kù)向來(lái)是Python最強(qiáng)大的功能之一,本文則探討如何在web.py框架上實(shí)現(xiàn),需要的朋友可以參考下
    2015-05-05
  • python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例

    python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例

    這篇文章主要介紹了python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python Tkinter Entry和Text的添加與使用詳解

    Python Tkinter Entry和Text的添加與使用詳解

    這篇文章主要介紹了Python Tkinter Entry和Text的添加與使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • python的多線程原來(lái)可以這樣解

    python的多線程原來(lái)可以這樣解

    這篇文章主要為大家介紹了python的多線程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Python hmac模塊使用實(shí)例解析

    Python hmac模塊使用實(shí)例解析

    這篇文章主要介紹了Python hmac模塊使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論