1. 程式人生 > >python之路--網絡編程之socket

python之路--網絡編程之socket

編程 font 上線 訪問 div 下載 地方 退出 知識

  我們使用qq、微信和別人聊天,通過瀏覽器來瀏覽頁面、看京東的網站,通過優酷、快播(此處只是懷念一下)看片片啥的等等,通過無線打印機來打印一個word文檔等,只要有無線、有網、有4G,我們就能好好的聊天,好好的看片片、好好的購物什麽的,對吧,那麽這些操作都叫做網絡通信,確切來說都需要使用網絡通信,前提是你要有網(大家記著這個‘網‘,我下面會給大家詳解),原來生活中處處使用了網絡通信,我們通過網絡通信的不同形式:比如說qq是我們下載到電腦或者手機上的應用程序(qq應用程序就是人家騰訊開發的軟件,放到你的電腦或者手機上供你使用的,大概明白應用程序意思就行,不用深究~~),瀏覽器也是我們下載的應用程序,但是瀏覽器是通過頁面來訪問別人的網站的,而打印機我是通過我電腦上的word來操作使用的。根據這些不同的場景或者說不用的溝通方式,在業內劃分了下面兩個架構(架構:就是不同的組成結構)。在看下面的幾個架構之前,我們需要知道什麽是客戶端,什麽是服務端。客戶端:安裝在你電腦上的qq,瀏覽器(360瀏覽器、chrome瀏覽器、IE瀏覽器等),當我們使用qq發送消息的時候,消息先發送到了騰訊,然後騰訊在轉發到你朋友的qq上,此時你的qq就是客戶端,騰訊就是服務端。當我們使用瀏覽器來看京東的網站的時候,我們電腦上的瀏覽器就叫做客戶端,京東就叫做服務端。

客戶端英文名稱:Client(使用服務端的服務),服務端英文名稱:Server(一直運行著,等待服務別人,不能有一天訪問百度,百度頁面打不開,不行吧。),下面所說的C\S架構就是說的Client\Server架構。

    a.硬件C\S架構:打印機。

    b.軟件C\S架構:QQ、微信、優酷、暴風影音、瀏覽器(IE、火狐,360瀏覽器等)。其中瀏覽器又比較特殊,很多網站是基於瀏覽器來進行訪問的,瀏覽器和各個網站服務端進行的通訊方式又常被成為B\S架構(瀏覽器英文名稱:Browser),web開發就是這個,後面大家知道有前端的課程對吧,前端就是瀏覽器上的知識,以後你會經常和瀏覽器打交道,學完前端就可以進行web開發全棧開發了。如果我把所有的東西都做成應用程序是不是很麻煩啊,要裝很多的軟件對吧,所有就開始有了B\S架構,只需要個瀏覽器就能使用很多的工具了,並且提供了一個統一入口,這也是為什麽B\S架構火了起來。但是手機端的還是用的應用程序多一些,但是手機端B\S架構也是一個趨勢,就像微信的小程序和公眾號,為什麽說是一個趨勢呢,不僅僅是因為方便因為省錢,而是提供了一個統一的入口,其實微信早就實現了。統一入口是什麽意思呢?就像我們公司經常用的一個公司內部管理系統,請假、打卡、報銷、查客戶等等,如果這些功能都需要打開一個網頁或者app,是不是很難受啊,那麽公司就做了這麽一個系統,大家在這個系統上關於上班的一些你需要的功能就都能完成了,這就是統一入口。這也是一個開發思想,大程序分成幾個小程序,開發速度也快,開發一個小功能就能上線,而不需要等著所有的功能全部開發完成才上線,解耦分治思想,公司做開發時這種思想很流行,叠代開發。說多了。。

    不管哪個架構,他們都要進行網絡通信,基本都要用socket,我們學習socekt就是為了完成C\S架構項目的開發

#  客戶端

import socket

# 創建socket對象
client = socket.socket()
# 找到服務器端口,IP地址要用字符串,端口要用int 一般在8000以後
server_ip_port = (‘192.168.12.56‘,8001)
# 連接服務端的應用程序,通過connect方法,參數是服務端的IP地址和端口
client.connect(server_ip_port)
while 1:
    to_server_msg = input(‘說給服務端聽:‘)
    print(‘=======輸入Q退出=======‘)
    if to_server_msg.upper() == ‘Q‘:
        break
    else:
        # 發消息,用的是send方法,裏面應該裝bytes 需要把中文編碼
        client.send(to_server_msg.encode(‘utf-8‘))
    # 服務端通過conn連接通道來收發消息,通過recv方法,recv裏面的參數是字節(B),1024的意思1024B=1KB
    from_server_msg = client.recv(1024) # receive
    # 把bytes解碼成中文
    print(‘服務端返回的話:‘,from_server_msg.decode(‘utf-8‘))
client.close()

  

# 服務端

import socket

# 創建socket對象
server = socket.socket()
# 給程序設置一個IP地址和端口號
ip_port = (‘192.168.12.56‘,8001)
# 綁定IP地址和端口
server.bind(ip_port)
# 監聽IP地址和端口,括號裏面什麽都不用寫
server.listen()
print(‘====開始建立連接====‘)
# 等待建立連接,conn是連接通道,address是客戶端的地址,(阻塞程序)
conn,addr = server.accept()
while 1:
    # 服務端通過conn連接通道來收發消息,通過recv方法,recv裏面的參數是字節(B),1024的意思1024B=1KB
    from_client_msg = conn.recv(1024)
    print(‘客戶端發出:‘, from_client_msg.decode(‘utf-8‘))
    to_client_msg  = input(‘回復客戶端的信息:‘)
    print(‘======輸入Q退出======‘)
    if to_client_msg.upper() == ‘Q‘:
        break
    else:
        conn.send(to_client_msg.encode(‘utf-8‘))
# 關閉通道
conn.close()
# 關閉socket對象
server.close()

  註意:先運行server,然後再運行client,然後你會發現client這個文件再輸出臺的地方讓你輸入內容,你輸入一個內容然後回車,你會發現server那邊的控制臺就輸出了以client發送的內容

python之路--網絡編程之socket