網站首頁 編程語言 正文
socket服務端和客戶端數據傳輸(TCP)
服務器端:
import socket
#創建一個socket對象
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999
#綁定地址
socket_server.bind((host, port))
#設置監聽
socket_server.listen(5)
# socket_server.accept()返回一個元組, 元素1為客戶端的socket對象, 元素2為客戶端的地址(ip地址,端口號)
client_socket, address = socket_server.accept()
#while循環是為了讓對話持續
while True:
#接收客戶端的請求
recvmsg = client_socket.recv(1024)
#把接收到的數據進行解碼
strData = recvmsg.decode("utf-8")
#設置退出條件
if strData == 'q':
break
print("接收: %s" % strData)
#輸入
msg = input("發送: ")
#發送數據,需要進行編碼
client_socket.send(msg.encode("utf-8"))
#關閉服務器端
socket_server.close()
客戶端:
import socket
#創建一個socket對象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999
#連接服務端
client.connect((host, port))
while True:
send_msg = input("發送: ")
#設置退出條件
if send_msg == "q":
break
send_msg = send_msg
#發送數據,編碼
client.send(send_msg.encode("utf-8"))
#接收服務端返回的數據
msg = client.recv(1024)
#解碼
print("接收:%s", % msg.decode("utf-8"))
#關閉客戶端
client.close()
流程圖
socket服務端,客戶端互相通信
利用socket傳遞參數,把運行的程序與客戶端結合,先啟動服務端,再啟動客戶端。基礎代碼如下:
服務端代碼
import socket
import time
print("服務端開啟")
#創建套接字
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#設置IP和端口
#host = socket.gethostname()
host = '127.0.1.1'
port = 3333
#bind綁定該端口
mySocket.bind((host, port))
#監聽
mySocket.listen(10)
while True:
#接收客戶端連接
print("等待連接....")
client, address = mySocket.accept()
print("新連接")
print("IP is %s" % address[0])
print("port is %d\n" % address[1])
while True:
#發送消息
msg = input("服務端發送:")
client.send(msg.encode(encoding='utf-8'))
print("發送完成")
print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))#格式化時間戳為標準格式
if msg == "EOF":
break
if msg == "quit":
client.close()
mySocket.close()
print("程序結束\n")
exit()
#讀取消息
msg = client.recv(1024)
print("服務端接收:",msg.decode("utf-8"))#把接收到的數據進行解碼
print("讀取完成")
if msg == b"EOF":
break
if msg == b"quit":
client.close()
mySocket.close()
print("程序結束\n")
exit()
客戶端代碼:
import socket
print("客戶端開啟")
#創建套接字
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#設置ip和端口
#host = socket.gethostname()
host = '127.0.1.1'
port = 3333
try:
mySocket.connect((host, port)) ##連接到服務器
print("連接到服務器")
except : ##連接不成功,運行最初的ip
print ('連接不成功')
while 1:
#接收消息
msg = mySocket.recv(1024)
print("客戶端接收:%s" % msg.decode("utf-8"))#把接收到的數據進行解碼
print("讀取完成")
if msg == b"EOF":
break
if msg == b"quit":
mySocket.close()
print("程序結束\n")
exit()
#發送消息
msg = input("客戶端發送:")
mySocket.send(msg.encode(encoding='utf-8'))
print("發送完成")
if msg == "EOF":
break
if msg == "quit":
mySocket.close()
print("程序結束\n")
exit()
print("程序結束\n")
原文鏈接:https://blog.csdn.net/weixin_44649870/article/details/87367670
相關推薦
- 2023-04-18 antd中form表單的wrapperCol和labelCol問題詳解_React
- 2023-01-30 delphi?判斷字符串是否包含漢字,正則版與非正則版實現_Delphi
- 2022-03-29 python實現k-means算法_python
- 2022-09-04 Golang?實現?RTP音視頻傳輸示例詳解_Golang
- 2022-02-15 獲取字符串大括號里面的值 ,并判斷字符串是否符合要求
- 2022-03-27 Docker下安裝Mongo4.2及客戶端工具連接Mongo_docker
- 2022-08-01 Oracle停止數據泵導入數據的方法詳解_oracle
- 2022-04-11 jackson中對null的處理
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支