【TCP/IP網路程式設計實驗】之【python實現客戶端給伺服器傳送小寫字母,伺服器返回大寫字母(TCP)】
1.0
Server
import socket
import time
def create_server(hostAndPort: tuple, data_size: int, data_type: str, connect_max: int):
"""
建立伺服器
:param hostAndPort: 本機IP和開放埠
:param data_size: 最大傳輸位元組
:param data_type: 編解碼格式
:param connect_max: 最大連線數
:return:
"""
try:
# 建立伺服器socket 物件,模式為TCP
server = socket.socket(
socket.AF_INET, socket.SOCK_STREAM # TCP
)
# 繫結主機IP與埠
server.bind(hostAndPort)
# 設定最大連線數
server.listen(connect_max)
# 退出標緻
exit_flag = 0
while True:
print('等待連線。。。', end='')
# 接收套接字物件與地址
client_socket, add = server.accept()
print('\r[{}]{}連線成功!'.format(time.asctime(), add))
while not exit_flag:
# 接收內容,並解碼
receiver_data = client_socket.recv(data_size).decode(data_type)
# 退出標緻
if receiver_data == 'exit':
exit_flag = 1
client_socket.send('exit'.encode(data_type))
print('[{}]{}已退出'.format(time.asctime(), add))
else:
# 列印接收的內容
print('[{}]接收到來自{}的內容:{}'.format(time.asctime(), add, receiver_data))
# 將字母全部轉為大寫
send_data = receiver_data.upper()
# 利用客戶端套接字物件傳送給客戶端
client_socket.send(send_data.encode(data_type))
# 列印傳送的內容
print('已傳送給{}內容:{}'.format(add, send_data))
except Exception as e:
raise e
if __name__ == '__main__':
create_server(('127.0.0.1', 8888), 1024, 'utf-8', 5)
client
import socket
import time
def create_client(server_host_and_port: tuple, data_size: int, data_type: str):
"""
建立客戶端
:param server_host_and_port: 伺服器IP及埠
:param data_size: 傳輸位元組大小
:param data_type: 編解碼型別
:return:
"""
try:
# 建立客戶端socket物件,模式為TCP
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連線伺服器
client.connect(server_host_and_port)
# 退出標緻
exit_flag = 0
while not exit_flag:
# 輸入要傳送的內容
send_data = input('請輸入要傳送的字元:')
# 編碼併傳送內容
client.send(send_data.encode(data_type))
# 接收內容並解碼
receive_data = client.recv(data_size).decode(data_type)
if receive_data == 'exit':
exit_flag = 1
else:
# 列印伺服器返回的內容
print('[{}]接收到來自伺服器的訊息:{}'.format(time.asctime(), receive_data))
except Exception as e:
print(e)
raise e
if __name__ == '__main__':
create_client(('127.0.0.1', 8888), 1024, 'utf-8')
執行效果截圖:
2.0
解決客戶端強行退出時,伺服器丟擲異常:
只需要修改Server:
import socket
import time
def create_server(hostAndPort: tuple, data_size: int, data_type: str, connect_max: int):
"""
建立伺服器
:param hostAndPort: 本機IP和開放埠
:param data_size: 最大傳輸位元組
:param data_type: 編解碼格式
:param connect_max: 最大連線數
:return:
"""
try:
# 建立伺服器socket 物件,模式為TCP
server = socket.socket(
socket.AF_INET, socket.SOCK_STREAM # TCP
)
# 繫結主機IP與埠
server.bind(hostAndPort)
# 設定最大連線數
server.listen(connect_max)
# 退出標緻
exit_flag = 0
while True:
print('等待連線。。。', end='')
# 接收套接字物件與地址
client_socket, add = server.accept()
print('\r[{}]{}連線成功!'.format(time.asctime(), add))
while not exit_flag:
# 接收內容,並解碼,若客戶端異常退出,放棄此客戶端
try:
receiver_data = client_socket.recv(data_size).decode(data_type)
except ConnectionResetError:
print('[{}]{}異常退出!'.format(time.asctime(), add))
break
# 退出標緻
if receiver_data == 'exit':
exit_flag = 1
client_socket.send('exit'.encode(data_type))
print('[{}]{}已退出'.format(time.asctime(), add))
else:
# 列印接收的內容
print('[{}]接收到來自{}的內容:{}'.format(time.asctime(), add, receiver_data))
# 將字母全部轉為大寫
send_data = receiver_data.upper()
# 利用客戶端套接字物件傳送給客戶端
client_socket.send(send_data.encode(data_type))
# 列印傳送的內容
print('已傳送給{}內容:{}'.format(add, send_data))
except Exception as e:
raise e
if __name__ == '__main__':
create_server(('127.0.0.1', 8888), 1024, 'utf-8', 5)
強行終端客戶端效果:
相關文章
- 初識Modbus TCP/IP-------------C#編寫Modbus TCP客戶端程式(二)TCPC#客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- 001 Rust 網路程式設計,實現 TCP 服務端和客戶端程式Rust程式設計TCP服務端客戶端
- Go 實現字串首字母大、小寫函式Go字串函式
- Python如何列印出26個大寫字母和26個小寫字母Python
- python 實現 TCP、UDP 客戶端最簡流程PythonTCPUDP客戶端
- 【windows socket+TCP伺服器客戶端】WindowsTCP伺服器客戶端
- TCP併發伺服器的程式設計實現TCP伺服器程式設計
- TCP實現公網伺服器和內網客戶端一對多訪問(C語言實現)TCP伺服器內網客戶端C語言
- Android-TCP客戶端的實現AndroidTCP客戶端
- Linux系統程式設計(34)—— socket程式設計之TCP伺服器與客戶端的互動Linux程式設計TCP伺服器客戶端
- C語言:將字串中所有小寫字母轉為大寫字母C語言字串
- socket程式設計實現tcp伺服器_C/C++程式設計TCP伺服器C++
- TCP程式設計之服務端和客戶端的開發TCP程式設計服務端客戶端
- 013--Hbuilder--js--將字串中所有大寫字母改成小寫,所有小寫字母改成大寫UIJS字串
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- 計算機網路之八:TCP協議(2) TCP可靠傳輸的實現計算機網路TCP協議
- 002 Rust 網路程式設計,實現 UDP 伺服器和客戶端Rust程式設計UDP伺服器客戶端
- Golang 編寫 Tcp 伺服器GolangTCP伺服器
- 13:將字串中的小寫字母轉換成大寫字母字串
- 將大量檔案的擴充名中大寫字母改為小寫:Python實現Python
- php首字母小寫怎麼轉大寫PHP
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- python怎麼將字母大寫Python
- C語言透過socket實現TCP客戶端C語言TCP客戶端
- 理解 TCP/IP 網路棧 & 編寫網路應用TCP
- 伺服器獲取真實客戶端 IP伺服器客戶端
- 2161: 【例9.3】小寫字母轉大寫字母 【超出字元資料範圍】字元
- java TCP入門程式設計(檔案傳送、服務端接收多個客戶端請求)JavaTCP程式設計服務端客戶端
- linux網路程式設計之用socket實現簡單客戶端和服務端的通訊(基於TCP)Linux程式設計客戶端服務端TCP
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- 靜態方法輸出引數統計大寫字母、小寫字母、數字、其他字元的個數字元
- 系統程式設計-網路-tcp客戶端伺服器程式設計模型(續)、連線斷開、獲取連線狀態場景程式設計TCP客戶端伺服器模型
- python 實現 TCP 伺服器最簡流程PythonTCP伺服器
- 實現一個clickhouse tcp協議客戶端驅動TCP協議客戶端
- excel大寫字母轉換Excel
- Spring Boot+Socket實現與html頁面的長連線,客戶端給伺服器端發訊息,伺服器給客戶端輪詢傳送訊息,附案例原始碼Spring BootHTML客戶端伺服器原始碼
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP