Клиентский сервер Python - PullRequest
       11

Клиентский сервер Python

0 голосов
/ 08 апреля 2019

Я подключил следующим образом GUI (компьютер) -FPGA-PLC.Здесь FPGA работают как сервер для GUI и как клиент для PLC.Графический интерфейс и ПЛК данных отправляются и принимаются через посредник, который является FPGA (здесь FPGA программируется с использованием python) с использованием протокола TCP / IP

Код клиентского сервера, который я написал на той же странице.

sboard.listen()      #(Fpga in listening mode)
while True:
    print('waiting for connection')
    connboard, addrboard = sboard.accept()
    print('connecting to {} port {}'.format(*plcserver_address))

    splc.connect(plcserver_address)    #(Fpga conects with plc as a client)

    print('Connected by', addrboard)
    try:
        while True:
            datagui = connboard.recv(1024) #data received form gui tofpga
            if datagui:
                print('received data from gui{!r}'.format(datagui))
                splc.sendall(datagui) #data send from fpga to plc
                print('data send')
                dataplc = splc.recv(1024)
                print('received data from plc{!r}'.format(dataplc))
                connboard.sendall(dataplc)
                print('finally data is send back to gui')
            else:
                splc.close()
                print('no data from gui')
                break
    finally:
        splc.close()
        sboard.close()
        print('connection lost')

При первой попытке все работает гладко, но после закрытия соединения из графического интерфейса и повторной попытки соединения с fpga выдает ошибку:

OSError                                   Traceback (most recent call last)
<ipython-input-11-7e789770a359> in <module>()
     13 while True:
     14     print('waiting for connection')
---> 15     connboard, addrboard = sboard.accept()
     16     print('connecting to {} port {}'.format(*plcserver_address))
     17     splc.connect(plcserver_address)

/usr/lib/python3.6/socket.py in accept(self)
    203         For IP sockets, the address info is a pair (hostaddr, port).
    204         """
--> 205         fd, addr = self._accept()
    206         # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
    207         # new socket. We do not currently allow passing SOCK_NONBLOCK to

OSError: [Errno 9] Bad file descriptor
...