Impossibile associare 127.0.0.123 a tcp socket python

2

Sto cercando di imparare i socket TCP per il mio progetto. Li userò per trasferire file tra computer.

La combo del client server copiata da qualche tutorial funziona bene fino a quando l'ip che sto tentando di associare è 127.0.0.1 . Quando lo cambio in qualcosa di meno standard, come dice 127.0.0.123 OSX, che non posso associare a questo indirizzo:
socket.error: [Errno 49] Can't assign requested address

Non ho problemi con debian tough.

Codice server

#!/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()

Codice 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()
    
posta fulaphex 28.01.2016 - 20:05
fonte

1 risposta

3

Su un Mac l'interfaccia di loopback ha solo l'indirizzo 127.0.0.1 configurato. Puoi sempre aggiungere un alias all'IP di cui hai bisogno:

sudo ifconfig lo0 alias 127.0.0.123

Il tuo codice Python ha funzionato per me allora.

Per eliminare l'alias, procedi come segue:

sudo ifconfig lo0 -alias 127.0.0.123

Per rendere persistente questo dopo il riavvio, crea org.local.localhost.plist in / Library / LaunchDaemons /. Modifica le autorizzazioni con:

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

Apri il file con

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

e aggiungi il seguente contenuto:

<?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>

Infine carica il daemon di avvio con:

sudo launchctl load /Library/LaunchDaemons/org.local.localhost.plist
    
risposta data 28.01.2016 - 20:27
fonte

Leggi altre domande sui tag