国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 16:13:41
字體:
來源:轉載
供稿:網友

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 PortHOST = ''PORT = 21567ADDR = (HOST, PORT)# BuffSizeBUFSIZ = 1024# build sockettcpSerSock = socket(AF_INET, SOCK_STREAM)# bind sockettcpSerSock.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 = 21567ADDR = (HOST, PORT)# BufferSizeBUFSIZ = 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 datatcpCliSocket.close()

無連接的UDP socket編程

# -*- coding: utf-8 -*-from socket import *from time import ctime # Address and Port HOST = ''PORT = 8000ADDR = (HOST, PORT)# BufferSizeBUFFSIZE = 1024# build socketudpSerSock = socket(AF_INET, SOCK_DGRAM)# bind socketudpSerSock.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 = 8000ADDR = (HOST, PORT)# BufferSizeBUFSIZ = 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 PortHOST = ''PORT = 21567ADDR = (HOST, PORT)# BuffSizeBUFSIZ = 1024# build RequestHandlerclass MyRequestHandler(SRH):  def handle(self):    print '...connected from: ', self.client_address    self.wfile.write('[%s] %s' % (ctime(), self.rfile.readline()))# build TCPServerTCPServ = TCP(ADDR, MyRequestHandler)print 'waiting for connection...'# loop to processTCPServ.serve_forever()
# -*- coding:utf-8 -*-from socket import *# Address and Port HOST = '127.0.0.1'PORT = 21567ADDR = (HOST, PORT)# BufferSizeBUFSIZ = 1024while 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()

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天台县| 余干县| 常宁市| 清丰县| 西林县| 乐清市| 阿合奇县| 晋江市| 海伦市| 临沧市| 东光县| 无为县| 阳西县| 凤庆县| 崇左市| 马关县| 集安市| 北辰区| 富蕴县| 安龙县| 阿拉善右旗| 香格里拉县| 文登市| 三江| 迭部县| 八宿县| 绥德县| 鄂托克前旗| 广宗县| 安远县| 淄博市| 舞钢市| 体育| 通江县| 美姑县| 宁德市| 青龙| 龙州县| 米脂县| 松桃| 宽甸|