Tcpclient send [FIN, ACK]

9 次查看(过去 30 天)
Malin
Malin 2023-2-17
回答: Mathy 2024-8-16
Hi!
I'm trying to communicate with an external server from MATLAB using tcpclient.
To test the connection, the server can be quarried with a ping sending a message in the format '{ "Ping" : 1 }', the response is '{ "Pong" : 1 }'.
Using wireshark, a correct sequence for the ping procedure is:
i.e. the server expects a tcp packet with the FIN flag enabled indicating "end of message" .
Using python the behavior can be replicated using the socket library
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 8333))
s.sendall('{ "Ping" : 1 }'.encode())
s.shutdown(1)
data = s.recv(15)
print ('Received', data.decode())
Using Matlab and tcpclient I'm not able to get this behavior with the FIN packets, indicating end of message.
I've tried
client = tcpclient("0.0.0.0",8333,'Timeout',1)
configureTerminator(client,"CR")
data='{ "Ping" : 1 }'
writeline(client,data)
response=readline(client)
fclose(client);
delete(client)
but the server only response after getting a [FIN] packet, which only occurs with "delete(client)", which means I cannot handle the response as I've just deleted the client.
My question is if there's a way to sending a [FIN] packet without deleting the object handling the communication using tcpclient and Matlab?
Kind regards
/Marcus

回答(1 个)

Mathy
Mathy 2024-8-16
Hi Malin,
You can make use to Python MATLAB interface to resolve the issue.
Here is the sample code,
s = py.socket.socket(py.socket.AF_INET, py.socket.SOCK_STREAM)
s.connect({'localhost', int32(8333)});
req = py.str('{ "Ping" : 1 }').encode()
s.sendall(req);
s.shutdown(1);
data = s.recv(15)
For this to work, you need MATLAB compatible python installed in your system. You can check the python compatible versions here:
Hope this helps!

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by