Python網絡編程【客戶端與服務器通信】

一、將數據寫在發送語句中【傳統方式】

server端代碼:

import socket
#服務器端將socket套接字賦給sock套接字
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#服務器端調用sock.setsockopt爲這個socket對象設置值,包括(level,optname,value)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#服務器調用sock.bind爲這個socket對象綁定到一個地址上,它需要一個主機地址和端口組成的元組作爲參數
sock.bind(('127.0.0.1',8000))
#服務器用sock.listen爲這個socket開始TCP監聽,參數可以爲掛起的最大連接數量,該值至少爲1,大部分程序設爲5就可以
sock.listen(5)
#進行無限循環
while 1:
    #sock.accept被動接受TCP客戶端的連接,等待連接的到來。
    cli_sock,cli_addr=sock.accept()
    #sock.recv()接受TCP數據,將cli_sock套接字接受的數據傳遞給rep嵌套字
    req=cli_sock.recv(4096)
    #cli_sock發送TCP數據,將string的數據發送到連接的套接字,返回值是要發送的字節數量
    cli_sock.send(b'hello world')
    #關閉套接字
    cli_sock.close()

client端代碼:

import socket
#客戶端將socket套接字賦給sock套接字
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#客戶端調用sock.connect主動初始化服務器連接,參數爲(hostname,port)
sock.connect(('127.0.0.1',8000))
#客戶端調用sock.send向服務器發送數據
sock.send(b"GET/HTTP/1.1\r\nHost:127.0.0.1:8080\r\n\r\n")
#客戶端使用套接字data代替sock.recv接受的數據值
data=sock.recv(4096)
#打印出來data
print(data)
#關閉套接字
sock.close()

運行演示:

首先運行啓動服務器,再運行啓動客戶端,然後客戶端與服務器建立連接,向服務器發送數據,然後接受服務器發送過來的字符數據b’hello world’。
在這裏插入圖片描述

二、將服務器和客戶端封裝起來【優化方式】

server端代碼:

import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.bind(('127.0.0.1',8081))
phone.listen(5)

print('starting...')
while True:#鏈接循環
    conn,client_addr=phone.accept()
    print(client_addr)

    while True:#通信循環
        try:
            data=conn.recv(1024) #單位:bytes;
            # 1024代表最大接受1024個bytes
            print("客戶端的數據:",data)
            conn.send(data.upper())
        except ConnectionError:
            break
    conn.close()
phone.close()

client端代碼:

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8081))

while True:
    msg=input('>>').strip()
    if not msg:continue
    phone.send(msg.encode('utf-8'))
    data=phone.recv(1024)
    print(data.decode("utf-8"))

phone.close()

運行演示:

先啓動服務器,服務器輸出“starting…” ,然後啓動客戶端,與服務器建立連接,然後在客戶端可以輸入消息,回車發送給客戶端,客戶端接收並顯示出消息。
在這裏插入圖片描述
在這裏插入圖片描述

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