網(wǎng)站首頁 編程語言 正文
socket服務(wù)端和客戶端數(shù)據(jù)傳輸(TCP)
服務(wù)器端:
import socket
#創(chuàng)建一個socket對象
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999
#綁定地址
socket_server.bind((host, port))
#設(shè)置監(jiān)聽
socket_server.listen(5)
# socket_server.accept()返回一個元組, 元素1為客戶端的socket對象, 元素2為客戶端的地址(ip地址,端口號)
client_socket, address = socket_server.accept()
#while循環(huán)是為了讓對話持續(xù)
while True:
#接收客戶端的請求
recvmsg = client_socket.recv(1024)
#把接收到的數(shù)據(jù)進行解碼
strData = recvmsg.decode("utf-8")
#設(shè)置退出條件
if strData == 'q':
break
print("接收: %s" % strData)
#輸入
msg = input("發(fā)送: ")
#發(fā)送數(shù)據(jù),需要進行編碼
client_socket.send(msg.encode("utf-8"))
#關(guān)閉服務(wù)器端
socket_server.close()
客戶端:
import socket
#創(chuàng)建一個socket對象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999
#連接服務(wù)端
client.connect((host, port))
while True:
send_msg = input("發(fā)送: ")
#設(shè)置退出條件
if send_msg == "q":
break
send_msg = send_msg
#發(fā)送數(shù)據(jù),編碼
client.send(send_msg.encode("utf-8"))
#接收服務(wù)端返回的數(shù)據(jù)
msg = client.recv(1024)
#解碼
print("接收:%s", % msg.decode("utf-8"))
#關(guān)閉客戶端
client.close()
流程圖
socket服務(wù)端,客戶端互相通信
利用socket傳遞參數(shù),把運行的程序與客戶端結(jié)合,先啟動服務(wù)端,再啟動客戶端。基礎(chǔ)代碼如下:
服務(wù)端代碼
import socket
import time
print("服務(wù)端開啟")
#創(chuàng)建套接字
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#設(shè)置IP和端口
#host = socket.gethostname()
host = '127.0.1.1'
port = 3333
#bind綁定該端口
mySocket.bind((host, port))
#監(jiān)聽
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:
#發(fā)送消息
msg = input("服務(wù)端發(fā)送:")
client.send(msg.encode(encoding='utf-8'))
print("發(fā)送完成")
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("程序結(jié)束\n")
exit()
#讀取消息
msg = client.recv(1024)
print("服務(wù)端接收:",msg.decode("utf-8"))#把接收到的數(shù)據(jù)進行解碼
print("讀取完成")
if msg == b"EOF":
break
if msg == b"quit":
client.close()
mySocket.close()
print("程序結(jié)束\n")
exit()
客戶端代碼:
import socket
print("客戶端開啟")
#創(chuàng)建套接字
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#設(shè)置ip和端口
#host = socket.gethostname()
host = '127.0.1.1'
port = 3333
try:
mySocket.connect((host, port)) ##連接到服務(wù)器
print("連接到服務(wù)器")
except : ##連接不成功,運行最初的ip
print ('連接不成功')
while 1:
#接收消息
msg = mySocket.recv(1024)
print("客戶端接收:%s" % msg.decode("utf-8"))#把接收到的數(shù)據(jù)進行解碼
print("讀取完成")
if msg == b"EOF":
break
if msg == b"quit":
mySocket.close()
print("程序結(jié)束\n")
exit()
#發(fā)送消息
msg = input("客戶端發(fā)送:")
mySocket.send(msg.encode(encoding='utf-8'))
print("發(fā)送完成")
if msg == "EOF":
break
if msg == "quit":
mySocket.close()
print("程序結(jié)束\n")
exit()
print("程序結(jié)束\n")
原文鏈接:https://blog.csdn.net/weixin_44649870/article/details/87367670
相關(guān)推薦
- 2022-11-20 C#?崩潰異常中研究頁堆布局的詳細過程_C#教程
- 2022-10-20 三種Golang數(shù)組拷貝方式及性能分析詳解_Golang
- 2022-05-06 golang mongo-driver 模糊查詢
- 2023-03-28 Go實現(xiàn)set類型的示例代碼_Golang
- 2022-07-06 C#線程開發(fā)之System.Thread類詳解_C#教程
- 2022-10-17 詳解Go語言中單鏈表的使用_Golang
- 2023-02-12 一文帶你了解Golang中reflect反射的常見錯誤_Golang
- 2023-04-07 React?styled?components樣式組件化使用流程_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支