Interface between Python and Matlab using tcpserver

17 ビュー (過去 30 日間)
Felix Immanuel Oertel
Felix Immanuel Oertel 2021 年 4 月 13 日
コメント済み: 文韬 王 2022 年 10 月 5 日
I am currently trying to run an instance of matlab as a tcp server using the tcpserver function from the Instrument Control Toolbox. I want a python script that acts as the TCP client to connect to the matlab server, send it commands and get the results back via TCP. Here is a simple example of this connection, as I am trying to implement it:
server = tcpserver('127.0.0.1', 1234)
while true
if server.NumBytesAvailable>0
try
data = read(server, 11, "string")
write(server, "Hello back!")
catch ME
clear server
rethrow(ME)
end
end
end
The code for the Python client is the following:
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect(('127.0.0.1', 1234))
print("Connection to server established!")
sock.sendall(b'Hello World')
data = sock.recv(1024)
print('Received', repr(data))
When I run the server and client, although Matlab receives the message from the Python client, I get the following error when it tries to send the answer:
data =
"Hello World"
Error using testserver (line 6)
Failed to write from the server. A TCP/IP client must be connected to the server.
Does anyone know why this happens and if there is a way to work around it?

回答 (1 件)

Kunal Kandhari
Kunal Kandhari 2021 年 6 月 20 日
Changing matlab code to following will work:
server = tcpserver('127.0.0.1', 1234,"ConnectionChangedFcn",@connectionFcn)
function connectionFcn(src, ~)
if src.Connected
data = read(src, 11, "string")
write(src, "Hello back!")
end
end
It will not close the connection also infinite clients can connect to this server.
  1 件のコメント
文韬 王
文韬 王 2022 年 10 月 5 日
Hello! I have encountered the same problem described above. I have tried your code and it worked well.
But unfortunately I have some special demands since I want to send abundant real-time data through a long-term iteration and embed the whole thing in the appdesigner environment, that is to say, I cannot stand the limited functionality that those data could only be sent when the connection state changes. For more detail, please see https://www.mathworks.com/matlabcentral/answers/1818280-error-occurred-when-communicating-between-matlab-server-and-python-client-via-tcp-ip
As for my tricky situation, Do you have any other suggestions? Please lend me a hand.

サインインしてコメントする。

製品


リリース

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by