机器视觉项目中,TCP/IP通讯协议是很常用的通讯方式,我们对软件进行内测时,需要有一个信号端来模拟服务器(或者客户端)来与软件通讯,来实现软件模拟运行,测试软件的稳定性。
1,视觉项目运行逻辑为:
2,Python实现Socket通讯步骤
1)服务器
- 创建socket对象:socket.socket()
- 将socket绑定到指定地址上,socket.bind((IPAddress, Port))
- 监听socket.listen()
- 等待客户请求连接:socket.accept()
- 通讯阶段,服务器与客户端传输数据:socket.send(),socket.recv()
- 关闭连接:socket.close()
2)客户端
- 创建对象:socket.socket()
- 连接服务器:socket.connect()
- 通讯阶段,与客户端之间传输数据:socket.send(),socket.recv()
- 关闭连接:socket.close()
3,代码实例
1)服务器
#!/usr/bin/python3
# 文件名:CVServer.py
import socket
import sys
ServerSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = str(input("Input IP Address:"))
port = int(input("Input Port Number:"))
msg_GrabTrigger = str(input("Set Camera Trigger Command:"))
bAnswerGrab = int(input("Anser GrabOK? If Anser Grabok,Press 1, else Press 0:"))
if (bAnswerGrab == 1):
msg_AnswerInfo = str(input("Set GrabOk Information:"))
bSendTestTrigger = int(input("Send Test Trigger? If send press 1, else press 0:"))
if (bSendTestTrigger == 1):
msg_TestTrigger = str(input("Set Test Trigger Command:"))
ServerSocket.bind((addr, port))
ServerSocket.listen(1)
print("Waiting Connect...")
clientSocket, add = ServerSocket.accept()
print("Connect Success!")
input("Press Enter to Start:")
while True:
msg = msg_GrabTrigger + "\r\n"
try:
clientSocket.send(msg.encode())
if (bAnswerGrab == 1):
msg_rec = clientSocket.recv(1024)
if (msg_rec.decode() == msg_AnswerInfo):
pass
else:
while True:
msg_rec = clientSocket.recv(1024)
if (msg_rec.decode() == msg_AnswerInfo):
break
else:
continue
if (bSendTestTrigger):
msg = msg_TestTrigger + "\r\n"
clientSocket.send(msg.encode())
msg_rec = clientSocket.recv(1024)
except:
print("None Client")
clientSocket.close()
break
2)客户端
#!/usr/bin/python3
# 文件名:CVServer.py
import socket
import sys
ClientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = str(input("Input IP Address:"))
port = int(input("Input Port Number:"))
msg_GrabTrigger = str(input("Set Camera Trigger Command:"))
bAnswerGrab = int(input("Anser GrabOK? If Anser Grabok,Press 1, else Press 0:"))
if (bAnswerGrab == 1):
msg_AnswerInfo = str(input("Set GrabOk Information:"))
bSendTestTrigger = int(input("Send Test Trigger? If send press 1, else press 0:"))
if (bSendTestTrigger == 1):
msg_TestTrigger = str(input("Set Test Trigger Command:"))
try:
ClientSocket.connect((addr, port))
print("Connect Success")
IsConnect = True
except:
print("Connect error")
IsConnect = False
if IsConnect:
while True:
msg = msg_GrabTrigger + "\r\n"
try:
ClientSocket.send(msg.encode())
if (bAnswerGrab == 1):
msg_rec = ClientSocket.recv(1024)
if (msg_rec.decode() == msg_AnswerInfo):
pass
else:
while True:
msg_rec = ClientSocket.recv(1024)
if (msg_rec.decode() == msg_AnswerInfo):
break
else:
continue
if (bSendTestTrigger):
msg = msg_TestTrigger + "\r\n"
ClientSocket.send(msg.encode())
msg_rec = ClientSocket.recv(1024)
except:
print("None Server")
ClientSocket.close()
break