跳到主要内容

Python实现

使用python原生包,socket实现。

数据格式

规定接收数据格式为Json
{"data":XXX}
XXX可以为字符串,int,float,数组等
端口输出为字符串

TCP定时接收数据

组件连接顺序如图所示,webinput weboutput 和前面板文本组件用来测试组件的输入输出: image.png 由于该组件为自动接收数据组件,会定时触发从tcp服务端接收数据,可以直接从前面板观察数据变化情况,如图所示: image.png 服务端的情况如图所示(检测连接成功): image.png 服务端实例代码(Python):

import socket
import time

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)


def reconnecting(s):
while True:
try:
conn, addr = s.accept()
return conn, addr
break
except Exception as e:
print(str(e))


conn, addr = s.accept()
print('Connection address:', addr)
count = 0

while True:
try:
out = str(count)
conn.send(bytes(out.encode("utf-8")))
count += 1
time.sleep(1)
except KeyboardInterrupt:
print("close")
break

conn.close()

TCP发送消息

组件连接顺序如图所示,webinput weboutput 和前面板文本组件用来测试组件的输入输出: image.png 由于该组件为发送数据组件,从webinput输入的数据会发送至tcp服务端,如果发送成功会返回一个表示发送成功的json,如图所示: image.png 可以直接在前面板看到输出: image.png 服务端情况如图: image.png 服务端实例代码(Python):

import socket
import time

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)


def reconnecting(s):
while True:
try:
conn, addr = s.accept()
return conn, addr
break
except Exception as e:
print(str(e))


conn, addr = s.accept()
print('Connection address:', addr)

while True:
try:
data = conn.recv(BUFFER_SIZE)
if data:
print("received data:", data)
else:
print("reconnecting...")
conn, addr = reconnecting(s)
greeting = f"Hello {data}!"
if data:
conn.send(bytes(greeting.encode("utf-8")))
print("send data:", greeting)

except KeyboardInterrupt:
print("close")
break

conn.close()

TCP发送文件

组件连接顺序如图所示,webinput weboutput 和前面板文本组件用来测试组件的输入输出,该组件要配置一个文件结束标志位参数,是为了让服务端知晓该文件发送完毕: image.png 由于该组件为发送文件组件,从webinput输入的文件(文件路径)会发送至tcp服务端,如果发送成功会返回一个表示发送成功的json,如图所示: image.png 服务端情况,会将文件内容保存在一个随机命名的文件中: image.png 服务端实例代码(Python):

import socket
import uuid
import json

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)


def reconnecting(s):
while True:
try:
conn, addr = s.accept()
return conn, addr
break
except Exception as e:
print(str(e))


conn, addr = s.accept()
print('Connection address:', addr)

f = open(str(uuid.uuid1()), "wb")
count = 0
while True:
chunk = conn.recv(1024)
if chunk:
try:
print(chunk.decode("utf-8"))
data = json.loads(chunk.decode("utf-8"))
if data["end"]:
f.close()
print("finish")
f = open(str(uuid.uuid1()), "wb")
count = 0
except Exception as e:
print("write data file")
f.write(chunk)
finally:
count += 1
else:
print("reconnecting...")
conn, addr = reconnecting(s)

conn.close()

TCP发送并接收消息

组件连接顺序如图所示,webinput weboutput 和前面板文本组件用来测试组件的输入输出: image.png 由于该组件为发送并接收数据组件,从webinput输入的数据会发送至tcp服务端,同时会实时监控服务端反馈数据,并输出到前面板文本显示,如图所示: image.png image.png 服务端情况: image.png 服务端实例代码(Python):

import socket
import time

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)


def reconnecting(s):
while True:
try:
conn, addr = s.accept()
return conn, addr
break
except Exception as e:
print(str(e))


conn, addr = s.accept()
print('Connection address:', addr)

while True:
try:
data = conn.recv(BUFFER_SIZE)
if data:
print("received data:", data)
else:
print("reconnecting...")
conn, addr = reconnecting(s)
greeting = f"Hello {data}!"
if data:
conn.send(bytes(greeting.encode("utf-8")))
print("send data:", greeting)

except KeyboardInterrupt:
print("close")
break

conn.close()