初級網路程式設計

2021-06-22 02:58:21 字數 2869 閱讀 3178

mayuyu學習python很久了,今天就開始學習python的網路程式設計。

要建立套接字,就像**插口一樣,沒有它就沒有辦法進行通訊。對於套接字來說,一般分為兩種:基於檔案型和基

於網路型。套接字實質上就是乙個通訊端點。當然,我們可以建立面向連線的套接字或者面向無連線的套接字,分別

對應tcp協議和udp協議。

在網路程式設計中,都是基於c/s模式的,所以分為客戶端和服務端。接下來學習利用python編寫最簡單的socket。

先來看基於tcp的socket:

服務端

#server

from socket import*

from time import ctime

host = '222.27.174.90'

port = 21511

bufsize = 1024

addr = (host,port)

tcpsersock = socket(af_inet, sock_stream)

tcpsersock.bind(addr)

tcpsersock.listen(5)

while true:

tcpclisock, addr = tcpsersock.accept()

while true:

data = tcpclisock.recv(bufsize)

if not data:

break

print '%s' %(ctime())

print data

tcpclisock.send('[%s]\n %s' %(ctime(), data))

tcpsersock.close()

客戶端

from socket import *

host = '222.27.174.90'

port = 21511

bufsize = 1024

addr = (host, port)

tcpclisock = socket(af_inet,sock_stream)

tcpclisock.connect(addr)

while true:

data = raw_input('>')

if not data:

continue

tcpclisock.send(data)

data = tcpclisock.recv(bufsize)

print data

tcpclisock.close()

服務端和客戶端的host與port一定要相同才行。

基於udp的socket:

服務端:

#server

from socket import*

from time import ctime

host = '222.27.174.90'

port = 21512

bufsize = 1024

addr = (host,port)

udpsersock = socket(af_inet, sock_dgram)

udpsersock.bind(addr)

while true:

data, addr = udpsersock.recvfrom(bufsize)

print '%s' %(ctime())

print data

udpsersock.sendto('[%s]\n %s' %(ctime(), data), addr)

udpsersock.close()

客戶端:

from socket import *

host = '222.27.174.90'

port = 21512

bufsize = 1024

addr = (host, port)

udpclisock = socket(af_inet,sock_dgram)

while true:

data = raw_input('>')

if not data:

continue

udpclisock.sendto(data, addr)

data, addr = udpclisock.recvfrom(bufsize)

print data

udpclisock.close()

接下來學習一些套接字物件的常用函式。。。

(1)服務端套接字函式

s.bind()         繫結位址(主機名,埠)到套接字

s.listen()       開始tcp監聽

s.accept()       被動接受tcp客戶端連線,(阻塞式等待連線的到來)

(2)客戶端套接字函式

s.connect()      主動初始化tcp伺服器連線

s.connect_ex()   connect)()函式的擴充套件版本,出錯時返回出錯碼,而不是丟擲異常

(3)公共用途的套接字函式

s.recv()         接收tcp資料

s.send()         傳送tcp資料

s.sendall()      完整傳送tcp資料

s.recvfrom()     接收udp資料

s.sendto()       傳送udp資料

網路初級RIP協議之我見

在討論動態路由協議前,我們不妨先聊聊靜態路由的優缺點。靜態路由的缺點 1 配置量繁瑣 2 無法針對拓撲的變化而自動變化,無法實時更新 靜態路由的優點 1 不占用裝置和鏈路資源 2 安全問題 故建議在小型網路使用靜態,大型或複雜網路使用動態路由協議 在使用動態路由協議時,盡量的控制更新量,保障安全,規...

ATL程式設計初級教程

文章 http hi.baidu.com hot blood2001 blog item fbe8f76238b61bdfe7113ad5.html 介紹 本教程的目的是告訴你如何使用atl建立乙個com伺服器,並使用visual c 和visual basic程式來分別呼叫這個伺服器。我並不想深入...

ATL程式設計初級教程

介紹 本教程的目的是告訴你如何使用atl建立乙個com伺服器,並使用visual c 和visual basic程式來分別呼叫這個伺服器。我並不想深入 com的細節,也不想讓你深陷於idl之中。這一教程只是為vc 的新手程式設計師設計的,告訴他們利用atl來建立乙個com物件有多麼簡單,並讓他們能對...