激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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.99tv | 亚洲免费视频一区二区 | 欧美性色生活片免费播放 | 娇喘在线| 欧美综合成人 | 中国老女人一级毛片视频 | 精品一区二区三区网站 | 99热1| 中文字幕涩涩久久乱小说 | 国产一级二级在线播放 | 欧美亚州 | 免费国产不卡午夜福在线 | 亚洲小视频网站 | 88xx成人永久免费观看 | 特大黑人videos与另类娇小 | 久久精品一区视频 | 天天操天天碰 | 久久精品国产99久久6动漫亮点 | av观看网站 | 亚洲一区二区三区视频免费 | 嫩草www | 欧美一级免费在线观看 | 麻豆一二区 | 亚洲第一页视频 | 一区二区三区日韩在线观看 | 国产精品成人亚洲一区二区 | 91一区二区在线观看 | 久久精品亚洲一区二区三区观看模式 | 成人午夜在线免费 | 噜噜噜在线 | 久久久久久免费 | 国产一国产精品一级毛片 | 日本aaaa片毛片免费观蜜桃 | 日本一区二区不卡在线 | 精品国产91久久久久久久 | 91成人久久 | 91av视频大全 | 一区二区免费看 | 九九精品在线观看视频 | 性生活视频一级 | 91精品国产91热久久久做人人 |