首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

错误:每个套接字地址(协议/网络地址/端口)通常只允许使用一次
EN

Stack Overflow用户
提问于 2014-01-20 16:56:06
回答 1查看 2K关注 0票数 1

我正在尝试用Python编写一个TCP客户端-服务器程序。一旦建立了连接,服务器就会回显(全部大写)客户端发送到服务器的任何内容。服务器应该能够通过使用线程同时并行处理多个请求。

然而,只要我运行server.py文件,我就会得到错误:

每个套接字地址(协议/网络地址/端口)通常只允许使用一次。

我尝试过更改端口号,也尝试过使用setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

我仍然收到这个错误。请帮帮忙。到目前为止,这是我的代码。

代码语言:javascript
复制
#!/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()
EN

回答 1

Stack Overflow用户

发布于 2014-01-20 18:12:45

如果您使用另一个端口,该错误是否仍然存在?如果没有,那么您的脚本仍在某个地方运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21229731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档