Python TCP客戶端和服務端開發 學習筆記

2021-10-23 10:18:57 字數 4318 閱讀 3537

:# 1. 建立tcp客戶端套接字

tcp_client_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 2. 和服務端套接字建立連線

tcp_client_socket.connect(

("192.168.1.207"

,9090))

send_connect =

"你好,我是技術茭白"

# input()

# 對字串進行編碼成為二進位制資料

# windows 裡面的網路協調助手使用的gbk編碼 linux使用utf-8

send_data = send_connect.encode(

"gbk"

)# 3. 傳送資料到伺服器端

tcp_client_socket.send(send_data)

# 4. 接收服務端的資料

# 1024: 表示每次接受的最大位元組數

recv_data = tcp_client_socket.recv(

1024

)# 對二進位制資料進行解碼

recv_content = recv_data.decode(

"gbk"

)print

("接受服務端的資料為:"

, recv_content)

# 5. 關閉套接字

tcp_client_socket.close(

)

import socket

if __name__ ==

'__main__'

:# 1. 建立tcp服務端套接字

tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 設定埠號復用 (埠號退出後立即釋放)

# so_linger: 表示當前套接字 so_reuseaddr: 表示復用埠號的選項 true:表示確定復用

tcp_server_socket.setsockopt(socket.so_linger, socket.so_reuseaddr,

true

)# 2. 繫結埠號

tcp_server_socket.bind((""

,9090))

# 3. 設定監聽

# 128: 表示最大等待建立連線的個數

tcp_server_socket.listen(

128)

# 迴圈等待客戶請求連線

while

true

:# 4. 等待接收客戶端的連線請求

# 注意點:每次當客戶端和服務端建立連線成功都會返回乙個新的套接字

# tcp_server_socket 只負責等待接收客戶端的連線請求,收發訊息不使用這套接字

news_client, ip_port = tcp_server_socket.accept(

)# 代買執行到此說明客戶端與服務端建立連線成功

print

("客戶端的ip和埠號為:"

, ip_port)

# 5. 接收客戶端的資料

# 收到資訊都使用返回的這個新套接字 1024: 表示每次最多接收1024個位元組

recv_data = news_client.recv(

1024

)# 對接收的二進位制資料進行解碼變成字串

recv_content = recv_data.decode(

"gdk"

) send_content =

"問題正在處理中...."

# 對字串進行編碼

send_data = send_content.encode(

"gbk"

)# 6. 傳送資料到客戶端

news_client.send(send_data)

# 關閉服務端與客戶端套接字,表示與客戶端終止通訊

news_client.close(

)# 7. 關閉套接字

# tcp_server_socket.close() # 服務端需一直服務,無需關閉

import socket

import threading

defhandle_client_request

(ip_port, news_client)

:"""

處理客戶端請求任務

:return:

"""print

("客戶端的ip和埠號為:"

, ip_port)

# 迴圈接收客戶端訊息

while

true

:# 5. 接收客戶端的資料

# 收到資訊都使用返回的這個新套接字 1024: 表示每次最多接收1024個位元組

recv_data = news_client.recv(

1024

)if recv_data:

print

("接收的資料長度是:"

,len

(recv_data)

)# 對接收的二進位制資料進行解碼變成字串

recv_content = recv_data.decode(

"gdk"

)print

("客戶端傳送的資料為:"

, recv_content,

"\t使用者:"

, ip_port)

send_content =

"問題正在處理中...."

# 對字串進行編碼

send_data = send_content.encode(

"gbk"

)# 6. 傳送資料到客戶端

news_client.send(send_data)

else

:# 客戶端關閉連線

print

("客戶端: "

, ip_port,

"已下線"

)break

# 關閉服務端與客戶端套接字,表示與客戶端終止通訊

news_client.close(

)if __name__ ==

'__main__'

:# 1. 建立tcp服務端套接字

tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 設定埠號復用 (埠號退出後立即釋放)

# so_linger: 表示當前套接字 so_reuseaddr: 表示復用埠號的選項 true:表示確定復用

tcp_server_socket.setsockopt(socket.so_linger, socket.so_reuseaddr,

true

)# 2. 繫結埠號

tcp_server_socket.bind((""

,9090))

# 3. 設定監聽

# 128: 表示最大等待建立連線的個數

tcp_server_socket.listen(

128)

# 迴圈等待客戶請求連線

while

true

:# 4. 等待接收客戶端的連線請求

# 注意點:每次當客戶端和服務端建立連線成功都會返回乙個新的套接字

# tcp_server_socket 只負責等待接收客戶端的連線請求,收發訊息不使用這套接字

news_client, ip_port = tcp_server_socket.accept(

)# 代買執行到此說明客戶端與服務端建立連線成功

# 當客戶端和服務端建立成功,建立子執行緒。讓子執行緒負責接受客戶端訊息

sub_thread = threading.thread(target=handle_client_request, args=

(ip_port, news_client)

)# 設定守護主線程,主線程退出子執行緒直接銷毀

sub_thread.setdaemon(

true

)# 啟動執行緒

sub_thread.start(

)# 7. 關閉套接字

# tcp_server_socket.close() # 服務端需一直服務,無需關閉

socket(C )客戶端和服務端

define winsock deprecated no warnings include include define port 5150 define msgsize 1024 pragma comment lib,ws2 32.lib void main system pause includ...

客戶端和服務端路徑問題

客戶端和服務端路徑問題 1.客戶端路徑和伺服器端路徑 客戶端路徑需要給出應用名稱,例如 day05 1 aservlet 伺服器端路徑無需給出應用名稱,例如 aservlet 2.客戶端路徑 1 頁面中都是客戶端路徑 超連結的href 表單的action 2 重定向也是客戶端路徑 response....

socket 客戶端和服務端通訊

客戶端要連線伺服器 首先要知道伺服器的ip位址。而伺服器裡有很多的應用程式,每乙個應用程式對應乙個埠號 所以客戶端想要與伺服器中的某個應用程式進行通訊就必須要知道那個應用程式的所在伺服器的ip位址,及應用程式所對應的埠號 首先建立乙個解決方案,在解決方案下建立乙個 socket通訊 windows窗...