How to connect a socket to another computer's socket through Internet
<p>I recently have some difficulties to connect a socket to another computer's socket through Internet, an image is worth a thousand words:</p>

<p><a href="http://i.stack.imgur.com/9CseJ.png" rel="nofollow"><img src="http://i.stack.imgur.com/9CseJ.png" alt="enter image description here"></a></p>

<p>Computer <strong>A</strong> is running this "<strong>listener.py</strong>" script:</p>

<pre><code>import socket
PORT = 50007              
BUFFER = 2048              
HOST = ''  

if __name__ == '__main__':
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen(1)
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            while True:
                data = conn.recv(BUFFER)
                if not data: break
                conn.sendall(data)
</code></pre>

<p>Computer <strong>B</strong> is running this "<strong>sender.py</strong>" script:</p>

<pre><code>import socket
HOST = '101.81.83.169'    # The remote host
PORT = 50007              # The same port as used by the server


if __name__ == '__main__':
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((HOST, PORT))
        s.sendall(b'Hello, world')
</code></pre>

<p>So first of all, I run the "<strong>listener</strong>" script of the computer <strong>A</strong>. Then, I run the "<strong>sender</strong>" script of the computer B. However, when I execute the "<strong>sender</strong>" script, I received a <strong>error</strong> message which explains me that I am not authorized to connect to this remote address. </p>

<p>So I would like to know how can I connect a socket to another socket through internet without changing the router configurations.</p>

<p>Thank you very much for your help.</p>

<p><strong>Edit</strong>: Here the error message (I didn't execute the same script for some reasons, but it's the same error message)</p>

<pre><code>sock.connect(('101.81.83.169',50007)) Traceback (most recent call last):   File "&lt;stdin&gt;", line 1, in
 &lt;module&gt;   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in
meth     return getattr(self._sock,name)(*args) socket.error: [Errno 61] Connection refused
</code></pre>

<blockquote>
  <p>So I would like to know how can I connect a socket to another socket through internet without changing the router configurations.</p>
</blockquote>

<p>You can't. The public IP address belongs to your router. Your server isn't listening in the router, it is listening in some host behind the router. You have to open that port in your router and forward it to the host your listener is running in: whatever that means in your particular router. Otherwise the router will refuse the connection, as it doesn't have anything listening at that port.</p>

python sockets networking