2016-11-19 8 views
0

Я хочу сделать TCP-связь между моим компьютером и сервером (ubuntu).Как решить socket.error: [Errno 10061] в Python с сервером и моим компьютером

IP-адрес сервера 203.246.114.176 и его порт 30000 открыт.

Сервер работает следующим server.py:

import socket 
import sys 

# Create a TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# Bind the socket to the port 
server_address = ('localhost', 30000) 
print >>sys.stderr, 'starting up on %s port %s' % server_address 
sock.bind(server_address) 

# Listen for incoming connections 
sock.listen(1) 

while True: 
    # Wait for a connection 
    print >>sys.stderr, 'waiting for a connection' 
    connection, client_address = sock.accept() 

    try: 
     print >>sys.stderr, 'connection from', client_address 

     # Receive the data in small chunks and retransmit it 
     while True: 
      data = connection.recv(16) 
      print >>sys.stderr, 'received "%s"' % data 
      if data: 
       print >>sys.stderr, 'sending data back to the client' 
       connection.sendall(data) 
      else: 
       print >>sys.stderr, 'no more data from', client_address 
       break 

    finally: 
     # Clean up the connection 
     connection.close() 

И мой компьютер имеет client.py:

import socket 
import sys 

# Create a TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# Connect the socket to the port where the server is listening 
server_address = ('203.246.114.176', 30000) 
print >>sys.stderr, 'connecting to %s port %s' % server_address 
sock.connect(server_address) 

try: 

    # Send data 
    message = 'This is the message. It will be repeated.' 
    print >>sys.stderr, 'sending "%s"' % message 
    sock.sendall(message) 

    # Look for the response 
    amount_received = 0 
    amount_expected = len(message) 

    while amount_received < amount_expected: 
     data = sock.recv(16) 
     amount_received += len(data) 
     print >>sys.stderr, 'received "%s"' % data 

finally: 
    print >>sys.stderr, 'closing socket' 
    sock.close() 

Когда я бегу на сервере, вывод таков:

starting up on localhost port 30000 
waiting for a connection 

и UFW статус, как это:

To       Action  From 
--       ------  ---- 
22       ALLOW  Anywhere 
5979/tcp     ALLOW  Anywhere 
5901      ALLOW  Anywhere 
8080      ALLOW  Anywhere 
5978/tcp     ALLOW  Anywhere 
5980/tcp     ALLOW  Anywhere 
31415      ALLOW  Anywhere 
5981      ALLOW  Anywhere 
5982      ALLOW  Anywhere 
5983      ALLOW  Anywhere 
5984      ALLOW  Anywhere 
5985      ALLOW  Anywhere 
22/tcp      ALLOW  Anywhere 
2222/tcp     ALLOW  Anywhere 
77/tcp      ALLOW  Anywhere 
21       ALLOW  Anywhere 
3306      ALLOW  Anywhere 
30000/tcp     ALLOW  Anywhere 
30001/tcp     ALLOW  Anywhere 
30002/tcp     ALLOW  Anywhere 
30003/tcp     ALLOW  Anywhere 
30004/tcp     ALLOW  Anywhere 
30005/tcp     ALLOW  Anywhere 
30006/tcp     ALLOW  Anywhere 
30007/tcp     ALLOW  Anywhere 
22 (v6)     ALLOW  Anywhere (v6) 
5979/tcp (v6)    ALLOW  Anywhere (v6) 
5901 (v6)     ALLOW  Anywhere (v6) 
8080 (v6)     ALLOW  Anywhere (v6) 
5978/tcp (v6)    ALLOW  Anywhere (v6) 
5980/tcp (v6)    ALLOW  Anywhere (v6) 
31415 (v6)     ALLOW  Anywhere (v6) 
5981 (v6)     ALLOW  Anywhere (v6) 
5982 (v6)     ALLOW  Anywhere (v6) 
5983 (v6)     ALLOW  Anywhere (v6) 
5984 (v6)     ALLOW  Anywhere (v6) 
5985 (v6)     ALLOW  Anywhere (v6) 
22/tcp (v6)    ALLOW  Anywhere (v6) 
2222/tcp (v6)    ALLOW  Anywhere (v6) 
77/tcp (v6)    ALLOW  Anywhere (v6) 
21 (v6)     ALLOW  Anywhere (v6) 
3306 (v6)     ALLOW  Anywhere (v6) 
30000/tcp (v6)    ALLOW  Anywhere (v6) 
30001/tcp (v6)    ALLOW  Anywhere (v6) 
30002/tcp (v6)    ALLOW  Anywhere (v6) 
30003/tcp (v6)    ALLOW  Anywhere (v6) 
30004/tcp (v6)    ALLOW  Anywhere (v6) 
30005/tcp (v6)    ALLOW  Anywhere (v6) 
30006/tcp (v6)    ALLOW  Anywhere (v6) 
30007/tcp (v6)    ALLOW  Anywhere (v6) 

Но мой компьютер показывает этот вывод:

C:\Users\user\Documents\notepad>python client.py 
Traceback (most recent call last): 
    File "client.py", line 7, in <module> 
    s.connect((host, port)) 
    File "C:\Python27\lib\socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
socket.error: [Errno 10061] 

Что случилось? А что мне делать?

help plz.

ответ

0

У вас ошибка в сервере в этой строке:

server_address = ('localhost', 30000) 

localhost обычно 127.0.0.1, поэтому Вы не привязывая его к 203.246.114.176, как Вы думаете. Попробуйте использовать

server_address = ('203.246.114.176', 30000) 

для точной IP-адрес, или

server_address = ('0.0.0.0', 30000) 

слушать на всех активных интерфейсах.

+0

Спасибо !!! Рекомендовать Ur очень полезно !!! –