Python:实现Socket通讯实例——模拟信号端与其他软件通讯

     机器视觉项目中,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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值