EC機(jī)器人8058和8059端口使用
1. 簡(jiǎn)介
在使用中二次開(kāi)發(fā)中,出現(xiàn)不方便使用示教器查看機(jī)器人報(bào)警問(wèn)題,以及運(yùn)行日志,這時(shí)候就可以使用8058以及8059端口來(lái)獲取.
端口區(qū)別
8058端口:日志類(lèi)型為:Error,Warning,Info
8059端口:原始日志接口
2. 操作流程
下面是一篇關(guān)于如何操作和使用 8058 端口的文檔。
8058 端口操作流程
概述
本章節(jié)介紹如何通過(guò)網(wǎng)絡(luò)編程與 8058 端口進(jìn)行通信。無(wú)論你使用的是哪種高級(jí)編程語(yǔ)言,基本步驟都是類(lèi)似的。本文將以 Python 代碼為例,并解釋每一步的操作目的和實(shí)現(xiàn)方法。
操作步驟
1. 建立與服務(wù)器的連接
首先,我們需要?jiǎng)?chuàng)建一個(gè) TCP 連接來(lái)連接到服務(wù)器的 8058 端口。以下是 Python 中的實(shí)現(xiàn)方法及其解釋?zhuān)?/p>
import socket
HOST = "172.16.11.31" # 服務(wù)器IP地址
PORT = 8058 # 服務(wù)器端口號(hào)
try:
# 創(chuàng)建一個(gè)TCP/IP套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2) # 設(shè)置超時(shí)時(shí)間為2秒
s.connect((HOST, PORT)) # 連接到服務(wù)器
print("已連接到服務(wù)器")
except socket.error as e:
print(f"Socket錯(cuò)誤: {e}")
exit(1)
except Exception as e:
print(f"其他錯(cuò)誤: {e}")
exit(1)
解釋?zhuān)?/p>
● 創(chuàng)建一個(gè) TCP 套接字。
● 設(shè)置超時(shí)時(shí)間,避免連接過(guò)程長(zhǎng)時(shí)間掛起。
● 嘗試連接到指定的服務(wù)器和端口,如果連接失敗,則捕獲異常并輸出錯(cuò)誤信息。
2. 發(fā)送指令
一旦連接建立,就可以通過(guò)發(fā)送指令來(lái)獲取服務(wù)器上的日志信息。在此例中,我們發(fā)送兩條指令來(lái)獲取日志信息:
try:
# 發(fā)送指令以獲取日志信息
str1 = "Type=Info\n"
s.send(str1.encode()) # 發(fā)送獲取類(lèi)型為Info的日志指令
time.sleep(1) # 等待1秒
str2 = "all\n"
s.send(str2.encode()) # 發(fā)送獲取全部日志信息的指令
解釋?zhuān)?/strong>
● Type=Info\n:請(qǐng)求類(lèi)型為 "Info" 的日志信息。(若請(qǐng)求輸入 Error 類(lèi)型,則獲取 Error 信息;若請(qǐng)求輸入 Warning類(lèi)型,則獲取 Error 和 Warning 類(lèi)型的日志信息;若請(qǐng)求輸入 Info,則獲取所有類(lèi)型的日志信息)
● all\n:請(qǐng)求獲取所有日志信息(輸入 all,輸入全部日志;輸入數(shù)字,如 10,輸出最后 10 行日志;輸入 exit,退出連接)。
● 使用 encode() 方法將字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)后發(fā)送。
3. 接收和處理數(shù)據(jù)
服務(wù)器會(huì)返回相應(yīng)的日志數(shù)據(jù),我們需要接收這些數(shù)據(jù)并進(jìn)行處理:(注意:數(shù)據(jù)格式UTF-8)
timeout_count = 0
max_timeout_count = 5 # 最大允許的超時(shí)次數(shù)
while True:
try:
data = s.recv(128000)
if not data:
print("服務(wù)器關(guān)閉連接")
break
print(data.decode('utf-8', 'ignore'))
timeout_count = 0 # 重置超時(shí)計(jì)數(shù)器
except socket.timeout:
timeout_count += 1
print(f"接收數(shù)據(jù)超時(shí) ({timeout_count}/{max_timeout_count})")
if timeout_count >= max_timeout_count:
print("超時(shí)次數(shù)過(guò)多,關(guān)閉連接")
break
except socket.error as e:
print(f"Socket錯(cuò)誤: {e}")
break
except Exception as e:
print(f"拋出異常: {e}")
break
解釋?zhuān)?/strong>
● 使用 recv() 方法接收數(shù)據(jù)。此方法一次最多接收 128000 字節(jié)的數(shù)據(jù)。
● 如果接收到的數(shù)據(jù)為空,則說(shuō)明服務(wù)器關(guān)閉了連接。
● 將接收到的字節(jié)數(shù)據(jù)解碼為字符串并打印出來(lái)。
● 處理接收過(guò)程中可能出現(xiàn)的各種異常。
4. 關(guān)閉連接
操作完成后,關(guān)閉與服務(wù)器的連接:
finally:
s.close()
print("連接已關(guān)閉")
解釋?zhuān)?/strong>
● 無(wú)論操作是否成功,最終都需要關(guān)閉套接字連接,以釋放系統(tǒng)資源。
python全部代碼
import socket
import time
HOST = "172.16.11.31"
PORT = 8058
try:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.settimeout(2)
s.connect((HOST, PORT))
print("已連接到服務(wù)器")
except socket.error as e:
print(f"Socket錯(cuò)誤: {e}")
exit(1)
except Exception as e:
print(f"其他錯(cuò)誤: {e}")
exit(1)
try:
str1 = "Type=Info\n"
s.send(str1.encode())
time.sleep(1)
str2 = "all\n"
s.send(str2.encode())
timeout_count = 0
max_timeout_count = 5 # 最大允許的超時(shí)次數(shù)
while True:
try:
data = s.recv(128000)
if not data:
print("服務(wù)器關(guān)閉連接")
break
print(data.decode('utf-8', 'ignore'))
timeout_count = 0 # 重置超時(shí)計(jì)數(shù)器
except socket.timeout:
timeout_count += 1
print(f"接收數(shù)據(jù)超時(shí) ({timeout_count}/{max_timeout_count})")
if timeout_count >= max_timeout_count:
print("超時(shí)次數(shù)過(guò)多,關(guān)閉連接")
break
except socket.error as e:
print(f"Socket錯(cuò)誤: {e}")
break
except Exception as e:
print(f"拋出異常: {e}")
break
finally:
s.close()
print("連接已關(guān)閉")
總結(jié)
通過(guò)本文檔的步驟和示例代碼,你可以使用任何高級(jí)編程語(yǔ)言與服務(wù)器的 8058 端口進(jìn)行通信。關(guān)鍵步驟包括:
1. 建立 TCP 連接。
2. 發(fā)送指令請(qǐng)求。
3. 接收并處理服務(wù)器返回的數(shù)據(jù)。
4. 關(guān)閉連接。
如果在操作過(guò)程中遇到任何問(wèn)題,請(qǐng)檢查網(wǎng)絡(luò)連接、服務(wù)器狀態(tài),以及確保你的編解碼方式與服務(wù)器一致。
8059端口操作流程
概述
本章節(jié)詳細(xì)說(shuō)明了如何通過(guò) 8059 端口與服務(wù)器通信,獲取原始日志。用戶(hù)可以通過(guò)發(fā)送不同的命令來(lái)獲取全部日志、指定行數(shù)的日志或退出連接。示例代碼使用 Python 編寫(xiě).
通信流程
1. 建立連接:通過(guò) TCP 協(xié)議連接到指定服務(wù)器和端口。
2. 發(fā)送請(qǐng)求:發(fā)送請(qǐng)求字符串以獲取日志。
3. 接收數(shù)據(jù):接收服務(wù)器返回的日志數(shù)據(jù)并保存到文件。
4. 關(guān)閉連接:完成操作后關(guān)閉連接。
操作說(shuō)明
● 獲取全部日志:連接后,輸入 all,服務(wù)器會(huì)返回全部日志。
● 獲取指定行數(shù)日志:連接后,輸入數(shù)字,如 10,服務(wù)器會(huì)返回最后 10 行日志。
● 退出連接:連接后,輸入 exit,斷開(kāi)與服務(wù)器的連接。
Python 示例代碼
import socket
HOST = "192.168.1.205"
PORT = 8059
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
s.connect((HOST, PORT))
print("已連接到服務(wù)器")
except socket.error as e:
print(f"Socket錯(cuò)誤: {e}")
exit(1)
except Exception as e:
print(f"其他錯(cuò)誤: {e}")
exit(1)
try:
# 新建文件或清空文件內(nèi)容
with open(r'D:\205\log\err_log_1.md', 'w') as file:
file.close()
# 獲取最近10條日志條目
str1 = "10\n"
s.send(str1.encode())
while True:
try:
data = s.recv(1024)
if not data:
print("服務(wù)器關(guān)閉連接")
break
with open(r'D:\205\log\err_log_1.md', 'a+') as f:
f.write(data.decode('utf-8'))
print(data.decode('utf-8'))
except socket.timeout:
print("接收數(shù)據(jù)超時(shí)")
break
except socket.error as e:
print(f"Socket錯(cuò)誤: {e}")
break
except Exception as e:
print(f"拋出異常: {e}")
break
finally:
s.close()
print("連接已關(guān)閉")
注意事項(xiàng)
1. 網(wǎng)絡(luò)連接穩(wěn)定性:
a. 確保網(wǎng)絡(luò)連接穩(wěn)定,避免由于網(wǎng)絡(luò)波動(dòng)導(dǎo)致的連接中斷或數(shù)據(jù)丟失。
2. 超時(shí)處理:
a. 設(shè)置合理的超時(shí)時(shí)間,防止程序長(zhǎng)時(shí)間等待而掛起。
3. 錯(cuò)誤處理:
a. 在連接、發(fā)送和接收數(shù)據(jù)時(shí),做好異常處理,并記錄錯(cuò)誤日志。
4. 數(shù)據(jù)完整性:
a. 在發(fā)送和接收數(shù)據(jù)時(shí),確保數(shù)據(jù)的完整性和正確性。必要時(shí)進(jìn)行數(shù)據(jù)校驗(yàn)。
5. 資源管理:
a. 在程序結(jié)束或出現(xiàn)異常時(shí),確保關(guān)閉所有打開(kāi)的連接和文件,以釋放系統(tǒng)資源。
6. 安全性:
a. 避免發(fā)送敏感信息,或使用加密方法保護(hù)數(shù)據(jù)傳輸?shù)陌踩浴?/p>
7. 日志記錄:
a. 在操作過(guò)程中記錄關(guān)鍵日志,以便在出現(xiàn)問(wèn)題時(shí)能夠追蹤和排查。