1. 程式人生 > >Python 網路程式設計之socket

Python 網路程式設計之socket

網路程式設計:資訊傳輸一般會有兩步,一是傳送,一是接收。

socket 基礎應用,先建立一個客戶端,然後建立一個伺服器端。客戶端負責傳送訊息和接收伺服器發過來的訊息,伺服器端負責接收客戶端傳送過來的訊息和傳送訊息到客戶端。

客戶端

# 客戶端
import socket

client = socket.socket() # 宣告 socket 型別,同時生成 socket 連線物件
# <socket.socket fd=496, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
print(client)
client.connect(("localhost", 7894))
# <socket.socket fd=496, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0,
#  laddr=('127.0.0.1', 59049), raddr=('127.0.0.1', 7894)>
print(client)

client.send(b"Hello World!----from client")
data = client.recv(1024) # 設定接收的長度,1024位元組 1K
print("recv:", data)

client.close()

伺服器端

# 伺服器端
import socket

server = socket.socket()
# <socket.socket fd=508, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
print(server)
server.bind(("localhost", 7894))    # 繫結要監聽埠
server.listen() # 監聽埠
# socket.socket fd=516, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0,
# laddr=('127.0.0.1', 7894)> 監聽的埠
print(server)

print("等待接聽中-----")
# conn 是客服端連過來而在伺服器端為其生成的一個連線例項
conn, addr = server.accept()        # 等待傳入資訊
# conn =<socket.socket fd=568, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0,
# laddr=('127.0.0.1', 7894), raddr=('127.0.0.1', 59049)>
# addr = ('127.0.0.1', 59049) 客戶端監聽的地址,從這個埠發給客戶端
print(conn, addr)

print("接聽成功------")
data = conn.recv(1024)      # 設定接受的資訊長度 1024位元組
print("recv:", data)
conn.send(data.upper())     # 設定返回給客戶端的資訊

server.close()      # 預設監聽一次就退出了