1

I am trying to write a TCP client-server program in Python. The server echoes back (all CAPS) whatever the client sends to the server, once a connection is established. The server should be able to handle more than one request at a time in parallel by using threads.

However, as soon as I run the server.py file, I get the error :

Only one usage of each socket address (protocol/network address/port) is normally permitted.

I have tried changing the port number, and also tried using setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

I am still getting the error. Please Help. Here is my code so far.

#!/usr/bin/python

import socket 
import sys 
import threading

class Server: 
    def __init__(self): 
        self.host = ''
        self.port = 12345 
        self.backlog = 5 
        self.size = 1024 
        self.server = None 
        self.threads = []       #initalizes a list of client threads

    def open_socket(self): 
        try: 
            self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self.server.bind((self.host,self.port)) 
            self.server.listen(5) 
        except socket.error, (value,message): 
            if self.server: 
                self.server.close() 
            print "Could not open socket: " + message 
            sys.exit(1) 

    def run(self): 
        self.open_socket() 
        running = 1 
        while running:
            # handle the server socket 
            c = Client(self.server.accept()) 
            c.start() 
            self.threads.append(c) 

        #close all threads 

        self.server.close() 
        for c in self.threads: 
            c.join()

class Client(threading.Thread): 
    def __init__(self,(client,address)): 
        threading.Thread.__init__(self) 
        self.client = client 
        self.address = address 
        self.size = 1024

    def run(self):
        running = 1
        while running:
            data = client.recv(size)
            if data == 'Quit':
                break
            else:
                print 'Received : ', data
                newdata = data.upper()
                client.send(newdata)
        print '\nConnection Closed'
        client.close()
        running = 0

if __name__ == "__main__": 
    s = Server() 
    s.run()

1 Answer 1

0

If you use another port does the error still exist? If not then you have the script still running somewhere.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.