一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python 網(wǎng)絡(luò)編程詳解及簡(jiǎn)單實(shí)例

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

2020-09-30 14:41bakari Python

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

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

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

一、Python socket編程

面向連接的TCP socket編程:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- 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()
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- 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編程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- 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()
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- 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ò)編程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- 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()
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- 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ì)本站的支持!

原文鏈接:http://www.cnblogs.com/bakari/p/4213832.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91极品在线观看 | 国产99在线a视频 | 波多野结衣女教师在线观看 | 久久艹影院 | 久久久精品成人免费看 | 亚洲人成伊人成综合网久久 | 亚洲系列国产精品制服丝袜第 | 亚洲国产一区二区三区a毛片 | 91探花在线观看 | 日韩激情视频在线观看 | 能播放18xxx18女同 | 亚洲欧美一区二区久久 | 国产精品欧美亚洲韩国日本 | 国产女王女m视频vk 国产农村一级特黄α真人毛片 | 国产成人啪精品午夜在线播放 | 日本韩国无矿砖码 | 亚洲国产一区二区三区青草影视 | 91精品国产亚一区二区三区 | 精品一区二区三区在线视频观看 | tobu8中国在线播放免费 | 国产男人搡女人免费视频 | 小舞丝袜调教喷水沦为肉奴 | 国产精品天天看天天爽 | 成人在线免费播放 | 亚洲精品网址 | 粗暴hd另类另类 | 色老太bbbbb| 教师波多野结衣在线播放 | 小货SAO边洗澡边CAO你动漫 | 视频精品一区二区三区 | 精品日韩欧美一区二区三区 | 范冰冰特黄xx大片 | 国产偷啪| 美国女网址www呦女 美国复古性经典xxxxx | 欧美日韩一区二区中文字幕视频 | 国产高清国内精品福利 | 99视频观看 | h日本漫画全彩在线观看 | 日本xxxxxx片免费播放18 | 亚洲第一se情网站 | 1769在线观看|