Tcpclient send [FIN, ACK]

8 views (last 30 days)
Malin
Malin on 17 Feb 2023
Answered: Mathy on 16 Aug 2024
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

Answers (1)

Mathy
Mathy on 16 Aug 2024
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!

Categories

Find more on MATLAB in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!