【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)
強行終端客戶端效果:
相關文章
- 001 Rust 網路程式設計,實現 TCP 服務端和客戶端程式Rust程式設計TCP服務端客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- Python如何列印出26個大寫字母和26個小寫字母Python
- python 實現 TCP、UDP 客戶端最簡流程PythonTCPUDP客戶端
- Go 實現字串首字母大、小寫函式Go字串函式
- TCP併發伺服器的程式設計實現TCP伺服器程式設計
- TCP實現公網伺服器和內網客戶端一對多訪問(C語言實現)TCP伺服器內網客戶端C語言
- socket程式設計實現tcp伺服器_C/C++程式設計TCP伺服器C++
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- 002 Rust 網路程式設計,實現 UDP 伺服器和客戶端Rust程式設計UDP伺服器客戶端
- TCP程式設計之服務端和客戶端的開發TCP程式設計服務端客戶端
- 013--Hbuilder--js--將字串中所有大寫字母改成小寫,所有小寫字母改成大寫UIJS字串
- C語言:將字串中所有小寫字母轉為大寫字母C語言字串
- Day39--返回大寫字母的字串字串
- 計算機網路之八:TCP協議(2) TCP可靠傳輸的實現計算機網路TCP協議
- 將大量檔案的擴充名中大寫字母改為小寫:Python實現Python
- python怎麼將字母大寫Python
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- Golang 編寫 Tcp 伺服器GolangTCP伺服器
- python 實現 TCP 伺服器最簡流程PythonTCP伺服器
- 2161: 【例9.3】小寫字母轉大寫字母 【超出字元資料範圍】字元
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- php首字母小寫怎麼轉大寫PHP
- C語言透過socket實現TCP客戶端C語言TCP客戶端
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- java TCP入門程式設計(檔案傳送、服務端接收多個客戶端請求)JavaTCP程式設計服務端客戶端
- 系統程式設計-網路-tcp客戶端伺服器程式設計模型(續)、連線斷開、獲取連線狀態場景程式設計TCP客戶端伺服器模型
- 字母排列(python實現)Python
- 伺服器獲取真實客戶端 IP伺服器客戶端
- 【Linux系統程式設計】libevent庫實現簡易tcp伺服器Linux程式設計TCP伺服器
- Spring Boot+Socket實現與html頁面的長連線,客戶端給伺服器端發訊息,伺服器給客戶端輪詢傳送訊息,附案例原始碼Spring BootHTML客戶端伺服器原始碼
- libuv中實現tcp伺服器TCP伺服器
- 實現一個clickhouse tcp協議客戶端驅動TCP協議客戶端
- Lombok首字母小寫,第二個字母大寫,jackson反序列化失敗Lombok
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- excel大寫字母轉換Excel
- 網路程式設計TCP/IP詳解程式設計TCP