2012-07-12 76 views
2

包含下面是我目前使用的代碼:不工作的Python套接字連接正確

soc1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
ADDR = (HOST,PORT) 
soc1.connect(ADDR) 
soc1.send('WILL SEND') 

運行上面的代碼時,我收到錯誤消息是:

Traceback (most recent call last): 
    File "C:\workspace\wx_python_test\chat_server.py", line 25, in <module> 
    soc1.connect(ADDR) 
    File "C:\Python27\lib\socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
socket.error: [Errno 10061] 

任何人都可以請解釋我正在經歷的問題以及我如何糾正它?

完整的源代碼:http://pastie.org/4245314

回答

1

socket.error: [Errno 10061]表明您試圖連接到端口未打開。您需要確保端口處於打開狀態,並且正在偵聽您的連接。

看起來您正在嘗試測試聊天服務器。爲了使聊天服務器正常工作,您需要確保它正在偵聽指定的端口。

Twisted提供了一個很好的框架,如果你以前沒有檢查過它。

from twisted.internet.protocol import Factory 
from twisted.protocols.basic import LineReceiver 
from twisted.internet import reactor 

class Chat(LineReceiver): 

    def __init__(self, users): 
     self.users = users 
     self.name = None 
     self.state = "GETNAME" 

    def connectionMade(self): 
     self.sendLine("What's your name?") 

    def connectionLost(self, reason): 
     if self.users.has_key(self.name): 
      del self.users[self.name] 

    def lineReceived(self, line): 
     if self.state == "GETNAME": 
      self.handle_GETNAME(line) 
     else: 
      self.handle_CHAT(line) 

    def handle_GETNAME(self, name): 
     if self.users.has_key(name): 
      self.sendLine("Name taken, please choose another.") 
      return 
     self.sendLine("Welcome, %s!" % (name,)) 
     self.name = name 
     self.users[name] = self 
     self.state = "CHAT" 

    def handle_CHAT(self, message): 
     message = "<%s> %s" % (self.name, message) 
     for name, protocol in self.users.iteritems(): 
      if ':' in message: 
       self.exc(message.split(':')[0]) 
      if protocol != self: 
       protocol.sendLine(message) 

    def exc(self, cmd): 
     print cmd 
     if cmd == 'who': 
      for i in self.users: 
       print i 


class ChatFactory(Factory): 

    def __init__(self): 
     self.users = {} # maps user names to Chat instances 

    def buildProtocol(self, addr): 
     return Chat(self.users) 


reactor.listenTCP(8123, ChatFactory()) 
reactor.run() 
0

你的python很好 - 檢查你的網絡配置,你可以連接到指定的主機/端口。您正在獲取Windows套接字錯誤10061 - 這在下面定義:

WSAECONNREFUSED 10061連接被拒絕。由於目標計算機主動拒絕,因此無法連接 。這通常會導致 嘗試連接到外部 主機上處於非活動狀態的服務 - 即沒有運行服務器應用程序的服務。

嘗試從您的終端窗口做telnet host port - 並查看您是否可以連接。如果不是,請首先解決網絡問題。