Python的網路編程socket

來源:互聯網
上載者:User

標籤:ddr   data   進不去   代碼   輸入   input   發送   內容   python   

(1)利用socket進行簡單的連結

Python裡面的socket支援UDP、TCP、以及進程間的通訊,socket可以把我們想要發送的東西封裝起來,發送過去,然後反解成原來的樣子,事實上網路通訊可以理解成都是建立在socket之上,下面的代碼是示範利用socket進行簡單的連結

#要成一次通訊,至少要有兩個人,也就是一個服務端,一個用戶端#服務端‘‘‘必須先開啟著,等待用戶端來進行連結請求,所以自己要先有個地址,也就是IP,也要現有自己的連接埠,沒有連接埠進不去‘‘‘import socketsk= socket.socket()#建立對象sk.bind((‘127.0.0.1‘,9999,))#綁定IP和連接埠,以一個元組的方式傳進去sk.listen(5)#在前面連結已經建立的情況下,後面最多讓五個人等待while True:#讓伺服器端處於可以永遠處於接受用戶端請求的狀態    conn,address=sk.accept()    print(conn,address)‘‘‘監聽連接埠,等待以及接受用戶端的請求,有可能會阻塞,主要功能是建立連結,以及接受用戶端資訊conn相當於雙方建立的這個連結,之後互相的通訊要依靠這個連結;address指的的對方的IP和連接埠‘‘‘

 下面是用戶端代碼

#用戶端import socketobj =socket.socket()‘‘‘相對於用戶端,制定要連結誰就好了‘‘‘obj.connect((‘127.0.0.1‘,9999,))#連結服務端obj.close()#連結之後關閉

  我們先讓伺服器端啟動,然後再啟動用戶端,結果

成功列印出了每次的連結,以及用戶端的IP以及連接埠號碼

(2)基於socket實現簡單的傳送訊息

#伺服器端import socketsk= socket.socket()sk.bind((‘127.0.0.1‘,9999,))#綁定IP和連接埠,以一個元組的方式傳進去sk.listen(5)#在前面連結已經建立的情況下,後面最多讓五個人等待while True:#讓伺服器端處於可以永遠處於接受用戶端請求的狀態    conn,address=sk.accept()#基於conn這個連結發送東西    conn.sendall(bytes(‘終有一天你會成為Python爬蟲工程師的‘,encoding=‘utf-8‘))#Python3要用bytes類型,發送位元組    ‘‘‘建立一次連結,伺服器就發送這個欄位‘‘‘    print(conn,address)

  然後用是用戶端代碼

#用戶端import socketobj =socket.socket()‘‘‘相對於用戶端,制定要連結誰就好了‘‘‘obj.connect((‘127.0.0.1‘,9999,))#連結服務端‘‘‘用戶端去連結服務端,如果伺服器端沒有返回訊息給用戶端,則用戶端會一直在recv狀態,一直等待伺服器的訊息‘‘‘result1= obj.recv(2014)#表示最多接收1024個位元組,超過了下次接收、result2= str(result1,encoding=‘utf-8‘)print(result2)obj.close()#連結之後關閉

  當啟動一次用戶端建立一次連結,就會收到訊息,結果

(3)基於socket實現聊天機器人

#伺服器端import socketsk= socket.socket()sk.bind((‘127.0.0.1‘,9999,))#綁定IP和連接埠,以一個元組的方式傳進去sk.listen(5)#在前面連結已經建立的情況下,後面最多讓五個人等待while True:#讓伺服器端處於可以永遠處於接受用戶端請求的狀態    conn,address=sk.accept()#基於conn這個連結發送東西    conn.sendall(bytes(‘你好,連結已經建立‘,encoding=‘utf-8‘))#Python3要用bytes類型,發送位元組    # ‘‘‘建立一次連結,伺服器就先發送這個欄位‘‘‘    while True:#讓通訊狀態不中斷        ret_bytes = conn.recv(1024)        ret_str = str(ret_bytes,encoding=‘utf-8‘)        if ret_str ==‘q‘:#如果收到q,則終止連結            break        conn.sendall(bytes(ret_str+‘ 已收到該資訊‘,encoding=‘utf-8‘))    #print(conn,address)

  下面是用戶端代碼

#用戶端import socketobj =socket.socket()‘‘‘相對於用戶端,制定要連結誰就好了‘‘‘obj.connect((‘127.0.0.1‘,9999,))#連結服務端‘‘‘用戶端去連結服務端,如果伺服器端沒有返回訊息給用戶端,則用戶端會一直在recv狀態,一直等待伺服器的訊息‘‘‘result1= obj.recv(2014)#表示最多接收1024個位元組,超過了下次接收、result2= str(result1,encoding=‘utf-8‘)print(result2)while True:    data = input(‘請輸入你要發送的內容:‘)    if data == ‘q‘:        obj.sendall(bytes(data, encoding=‘utf-8‘))        print(‘連結斷開‘)        break    else:        obj.sendall(bytes(data,encoding=‘utf-8‘))        rec_byte = obj.recv(1024)#發了之後,接收資訊        rec_str = str(rec_byte,encoding=‘utf-8‘)        print(rec_str)obj.close()#連結之後關閉

  結果

 

Python的網路編程socket

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.