亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python 網絡編程詳解及簡單實例

系統 1538 0

python 網絡編程詳解

網絡編程的專利權應該屬于Unix,各個平臺(如windows、Linux等)、各門語言(C、C++、Python、Java等)所實現的符合自身特性的語法都大同小異。在我看來,懂得了Unix的socket網絡編程,其他的形式的網絡編程方法也就知道了。這句話說得還不太嚴謹。準確的應該說成懂得了socket編程的原理,網絡編程也就知道了,不同之處就在于每個平臺,每個語言都有自己專享的語法,我們直接靈活套用就行了。

下面是用python實現的最基本的網絡編程的例子,即依托于客戶端-服務器的架構,實現客戶端與服務器之間的單向“數據流通”。我們分別用兩個方法來實現,一個方法是最原始的socket編程,另一個方法是利用python的面向對象對第一種方法進行封裝實現,目的是減少實現透明性,便于快速開發。

要求:客戶端輸入數據,發送到服務端,服務器端生成(時間戳+數據)的封裝數據回應客戶端。由于socket編程包括兩種:面向連接的和無連接的,這兩種分別對應TCP數據流和UDP數據報文。所以,我們兩種方法都進行實現。

一、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()
          

無連接的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的網絡編程

            
# -*- 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 的請求處理器的默認行為是接受連接,
  # 得到請求,然后就關閉連接,所以需要多次連接
  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()
          

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美国产另类 | 日韩一级欧美一级一级国产 | 国产精品日本一区二区在线看 | 亚洲欧美视频二区 | 伊人97在线 | 欧美亚洲综合一区 | 亚洲精品久久久久综合网 | 欧美日韩国产一区二区三区播放 | 日韩一区精品视频在线看 | 欧美成人禁片在线www | 91久久精品日日躁夜夜躁欧美 | 亚洲高清色 | 欧美成人性色生活片天天看 | 亚洲精彩| 国产成人一区二区三区高清 | 日韩中文字幕免费在线观看 | 四虎影视永久在线精品免费播放 | 青青青爽在线视频观看大全 | 在线播放国产一区二区三区 | 亚洲一区二区在线视频 | 四虎影视免费永久在线观看黄 | 精品久久久久久久久久久久久久久 | 国产高清国内精品福利99久久 | 亚洲免费资源 | 国产玖玖在线观看 | 欧美综合一区二区三区 | 日韩不卡 | 国产精品亚洲欧美日韩一区在线 | 久久综合九色综合97婷婷群聊 | 毛片6| 午夜网站在线观看免费网址免费 | 热99这里只有精品 | 九九影院理论片 | 日本在线精品 | 免费精品国产自产拍观看 | 精品国产免费第一区二区三区日韩 | 日韩成人免费一级毛片 | 久久99蜜桃精品久久久久小说 | s级毛片| 久久噜噜噜 | 色播综合网|