Tcpclient send [FIN, ACK]
6 views (last 30 days)
Show older comments
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
0 Comments
Answers (1)
Amith
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!
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!