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

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

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

服務器之家 - 腳本之家 - Python - python 網絡編程詳解及簡單實例

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

2020-09-30 14:41bakari Python

這篇文章主要介紹了python 網絡編程詳解及簡單實例的相關資料,需要的朋友可以參考下

python 網絡編程詳解

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

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

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

一、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的網絡編程

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩大片在线 | www.日本免费| 青青草原网| 洗濯屋动漫在线观看 | 国产成人精品高清免费 | 啪啪无尽3d动漫漫画免费网站 | www在线看| 18未年禁止免费观看 | 4s4s4s4s色大众影视 | 99久久精品免费看国产四区 | 欧美肥bb| 母性本能 | 成人永久免费福利视频网站 | 国产免费一区二区 | 成熟女人50岁一级毛片不卡 | 亚洲天堂影院在线观看 | 邪恶肉肉全彩色无遮琉璃神社 | 免费真实播放国产乱子伦 | 国产色视频网站 | 日韩欧美在线视频一区二区 | 思思玖玖| 国产一卡二卡3卡4卡四卡在线 | 色老板成人永久免费视频 | 亚洲aⅴ男人的天堂在线观看 | 国产国拍亚洲精品av | 国产一级视频久久 | 果冻传媒天美传媒乌鸦传媒 | 国产播放器一区 | tube性睡觉hd | 毛片免费的 | 喷奶水榨乳ova动漫无修 | 美女被爆| 免费看黄色片的网站 | 大桥未久一区二区 | 人人做人人爽人人爱 | 骚虎最新网址 | 国产永久一区二区三区 | 免费成年网 | 韩国久播影院理论片不卡影院 | 女女宿舍互慰h文小说 | 国产愉拍精品视频手机 |