Skip to content Skip to sidebar Skip to footer

Python, How To Send Data Over Tcp

I need to create a simple server that listens for TCP connections. If it receives text on or off then it sends (echo) back success. The receiving part is wor

Solution 1:

Well i did it a day before following a very good tutorial, cant find the link but here is the code

client.py

import socket

host = socket.gethostname()
port = 12345                   # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

For server

echo_server.py

import socket

host = ''# Symbolic name meaning all available interfaces
port = 12345# Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))

print host , port
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
whileTrue:

    try:
        data = conn.recv(1024)

        ifnot data: breakprint"Client Says: "+data
        conn.sendall("Server Says:hi")

    except socket.error:
        print"Error Occured."break

conn.close()

Solution 2:

A better approach from the python 3 docs would be:

Server

import socketserver

classMyTCPHandler(socketserver.BaseRequestHandler):
    """
    The request handler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """defhandle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print("{} wrote:".format(self.client_address[0]))
        print(self.data)
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999# Create the server, binding to localhost on port 9999
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you# interrupt the program with Ctrl-C
    server.serve_forever()

Client

import socket
import sys

HOST, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])

# Create a socket (SOCK_STREAM means a TCP socket)with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    # Connect to server and send data
    sock.connect((HOST, PORT))
    sock.sendall(bytes(data + "\n", "utf-8"))

    # Receive data from the server and shut down
    received = str(sock.recv(1024), "utf-8")

print("Sent:     {}".format(data))
print("Received: {}".format(received))

Hope it helps. Arturo

Solution 3:

If you need an endless/ continuous server connection you can use the following server code.

Server Code

import socket  # Import socket module
    
    port = 50000# Reserve a port for your service every new transfer wants a new port or you must wait.
    s = socket.socket()  # Create a socket object
    host = ""# Get local machine name
    s.bind(('localhost', port))  # Bind to the port
    s.listen(5)  # Now wait for client connection.print('Server listening....')
    
    x = 0whileTrue:
        conn, address = s.accept()  # Establish connection with client.whileTrue:
            try:
                print('Got connection from', address)
                data = conn.recv(1024)
                print('Server received', data)
    
                st = 'Thank you for connecting'
                byt = st.encode()
                conn.send(byt)
    
                x += 1except Exception as e:
                print(e)
                break
    
    conn.close()

Client Code

import socket  # Import socket moduleimport os
    import re
    
   
    s = socket.socket()  # Create a socket object
    port = 50000# Reserve a port for your service every new transfer wants a new port or you must wait.
    
    s.connect(('localhost', port))
    x = 0
    
    st = str(x)
    byt = st.encode()
    s.send(byt)
    
   # send message for hundred timeswhile x<100:
        st = str(x)
        byt = st.encode()
        s.send(byt)
    
        print(x)
    
        whileTrue:
            data = s.recv(1024)
            if data:
                print(data)
                x += 1breakelse:
                print('no data received')
    
    
    
    print('closing')
    s.close()
    
    

Post a Comment for "Python, How To Send Data Over Tcp"