2 votos

No se puede obligar a 127.0.0.123 para socket tcp python

Estoy tratando de aprender sockets TCP para mi proyecto. Los voy a usar para transferir archivos entre ordenadores.

El cliente de servidor de combo copiado de algún tutorial funciona bien la medida, ya que la ip que estoy tratando de bound 127.0.0.1. Cuando lo cambio a nada menos estándar, como 127.0.0.123 OSX dice, que no se puede enlazar a esta dirección:
socket.error: [Errno 49] Can't assign requested address

Yo no tengo ningún problema en debian difíciles.

El 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 de 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()

3voto

Aleix Dorca Puntos 81

En un Mac de la interfaz de bucle invertido sólo tiene el 127.0.0.1 dirección configurada. Siempre se puede añadir un alias a la IP que usted necesita:

sudo ifconfig lo0 alias 127.0.0.123

El código de python trabajado para mí.

Para eliminar el alias hacer lo siguiente:

sudo ifconfig lo0 -alias 127.0.0.123

Para hacer esta persistente a través de los reinicios crear org.local.localhost.plist en /Library/LaunchDaemons/. Cambiar los permisos con:

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

Abra el archivo con

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

y agregue 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 cargar el lanzamiento demonio con:

sudo launchctl load /Library/LaunchDaemons/org.local.localhost.plist

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X