risail
risail

Reputation: 537

Streaming TCP data to a Client with Python

I have read several different SO posts on using python as a TCP client and am not able to connect to a server sending data via TCP at 1hz which is hosted locally. The connection parameters I am using are:

import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip=socket.gethostbyname("127.0.0.1")
port=1234
address=(ip,port)
client.connect(address)
while True:
    print("test1")
    data = client.recv(1024)
    print("test2")
    print(data)

I believe that it is failing on the second line of the while statement but do not know why because it hangs and I am not given an error. Below are links to the SO articles, I have read and I have attached a screenshot from a TCP client tool that I am able to connect to the data server with. I'm expecting the data to stream in my print statement, is this not how it works? Whats the best way to make a persistent connection to a TCP connection with python?

Researched: (Very) basic Python client socket example,Python continuous TCP connection,Python stream data over TCP

enter image description here

Upvotes: 2

Views: 21123

Answers (1)

bill.lee
bill.lee

Reputation: 2375

Working with sockets: In order to communicate over a socket, you have to open a connection to an existing socket (a "client"), or create an open socket that waits for a connection (a "server"). In your code, you haven't done either, so recv() is waiting for data that will never arrive.

The simple case is connecting as a client to a server which is waiting/listening for connections. In your case, assuming that there is a server on your machine listening on port 1234, you simply need to add a connect() call.

import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip=socket.gethostbyname("127.0.0.1")
port=1234
address=(ip,port)
client.connect(address)  ## <--Add this line.
while True:
    print("test1")
    data = client.recv(1024)
    print("test2")
    print(data)

Upvotes: 3

Related Questions