python學習筆記(六)網絡編程

socket,又叫套接字,是一個抽象的概念。通常用socket表示打開了一個網絡連接。
在計算機網絡中學過TCP/IP協議,將網絡分爲物理層、網際層、傳輸層,應用層等。網絡編程一般屬於傳輸層之上的內容,會用到TCP、UDP協議。其中TCP是有連接傳輸,UDP是無連接的。

開始

網絡的作用是實現計算機互連與資源共享,因此數據傳輸是其核心內容。要實現數據的傳輸,需要知道要傳輸目標的IP地址,因此雙方互連需要至少知道一個地址。
通常把提前知道地址的那一端稱作服務器,發送數據請求的那一端稱作客戶端:

服務器

服務器接收客戶端的數據請求,從客戶端的請求信息中得到其地址,然後通過地址將所需數據發送回去。
分爲有連接的TCP服務器和無連接的UDP服務器。
TCP的服務器需先建立連接後發送數據,而UDP無需建立連接隨時可以接收與發送數據。

def tcp_sever():
    while(true):
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.bind(('127.0.0.1',9999))
        s.listen(2)
        sock, addr = s.accept()
        data = sock.recv(1024)
        print data
        sock.send('hello')
        sock.close()
def udp_sever():
    while(true):
        s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        s.bind(('127.0.0.1',9999))
        data = sock.recv(1024)
        print data
        sock.send('hello')
        sock.close()

這兩段代碼的作用都是從客戶端接收數據,打印數據然後發送一個hello,然後結束連接。
bind代表將服務器綁定到一個地址和一個端口上,0.0.0.0是所有地址,代表接收所有地址發來的信息,這裏使用本機地址;端口號9999代表這個程序的所在端口。
listen表示開始監聽是否有連接
要對多個客戶端進行處理必須用到多線程,這裏暫時放下。

客戶端

客戶端要連接服務器必須先知道服務器的IP地址,這裏使用127.0.0.1即本機地址作爲測試。(連接一些網站用的是網站的域名,域名可以通過域名服務器轉換爲IP地址)

def tcp_client():
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('127.0.0.1',9999))
    str = raw_input()
    s.send(str)
    print s.recv(1024)
    s.close()
def udp_client():
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    str = raw_input()
    s.sendto(str,('127.0.0.1',9999))
    print s.recv(1024)
    s.close()

編寫測試代碼

def mainfunc():
    cho = raw_input()
    if(cho == '1'):
        print 'tcp_sever'
        tcp_sever()
    elif(cho == '2'):
        print 'tcp_client'
        tcp_client()
    elif(cho == '3'):
        udp_sever()
    elif(cho == '4'):
        udp_client()

if __name__ == '__main__':
    mainfunc()

這裏寫圖片描述

參考資料:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832511628f1fe2c65534a46aa86b8e654b6d3567c000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章