No se puede enlazar 127.0.0.123 al tcp socket python

2

Estoy intentando aprender sockets TCP para mi proyecto. Los usaré para transferir archivos entre computadoras.

El combo del cliente del servidor copiado de algún tutorial funciona bien siempre que la ip que estoy intentando enlazar sea 127.0.0.1 . Cuando lo cambio a algo menos estándar, como 127.0.0.123 OSX dice, no puedo enlazar a esta dirección:
socket.error: [Errno 49] Can't assign requested address

No tengo problemas en Debian Hard.

Código del servidor

#!/usr/bin/env python

import socket

TCP_IP = '127.0.0.123'
TCP_PORT = 50050
BUFFER_SIZE = 1024  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "received data:", data
    conn.send(data)  # echo
conn.close()

Código del cliente:

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.123'
TCP_PORT = 50050
BUFFER_SIZE = 1024
MESSAGE = "message sent from client to server"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
s.close()
    
pregunta fulaphex 28.01.2016 - 20:05

1 respuesta

3

En una Mac, la interfaz de bucle invertido solo tiene configurada la dirección 127.0.0.1. Siempre puede agregar un alias a la IP que necesita:

sudo ifconfig lo0 alias 127.0.0.123

Tu código python funcionó para mí entonces.

Para eliminar el alias, haga lo siguiente:

sudo ifconfig lo0 -alias 127.0.0.123

Para hacer esto persistente en los reinicios, cree org.local.localhost.plist en / Library / LaunchDaemons /. Cambia los permisos con:

sudo chmod root:wheel /Library/LaunchDaemons/org.local.localhost.plist

Abre el archivo con

sudo nano /Library/LaunchDaemons/org.local.localhost.plist

y agrega el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.local.localhost</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/ifconfig</string>
        <string>lo0</string>
        <string>alias</string>
        <string>127.0.0.123</string>
        <string>up</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Finalmente, carga el demonio de lanzamiento con:

sudo launchctl load /Library/LaunchDaemons/org.local.localhost.plist
    
respondido por el Aleix Dorca 28.01.2016 - 20:27

Lea otras preguntas en las etiquetas