2015-08-15 91 views
2

我是python的新手。所以這個問題似乎很愚蠢。在Python中無法使用setsockopt連接

我想在python中爲客戶端和服務器實現一個簡單的程序。

的server.py是

import socket 
#s = socket.socket() 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.setsockopt(socket.SOL_SOCKET, 25, "wlan0"+'\0') 
host = socket.gethostname() 
port = 12345 
s.bind((host,port)) 
s.listen(5) 
while True: 
    c,addr = s.accept() 
    print "Got connection from",addr 
    c.send("Thank you for connecting") 
    c.close() 

的client.py是

import socket 
#s = socket.socket() 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.setsockopt(socket.SOL_SOCKET, 25, "wlan0"+'\0') 
host = socket.gethostname() 
port = 12345 
s.connect((host,port)) 
print s.recv(1024) 
s.close 

的問題是,編譯器是否顯示錯誤 「的操作是不允許的」。我嘗試以root身份執行程序。錯誤消失了,但客戶端和服務器連接沒有完成。

一切都加入這一行

s.setsockopt(socket.SOL_SOCKET, 25, "wlan0"+'\0') 

希望有人能aswer我的問題之前,工作正常。 我想通過wlan0接口連接客戶端和服務器。

謝謝。

+0

***客戶端和服務器在同一臺機器上?有線和無線在相同的IP範圍? Wlan網絡服務器的ip動態?*** – dsgdfg

+0

客戶端和服務器在同一臺機器上。 –

回答

1

服務器PY:

import socket 
import fcntl 
import struct 
#s = socket.socket() 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 




def get_ip_address(ifname): 
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    return socket.inet_ntoa(fcntl.ioctl(
     s.fileno(), 
     0x8915, # SIOCGIFADDR 
     struct.pack('256s', ifname[:15]) 
    )[20:24]) 

host = get_ip_address("eth0")#replace with "wlan0" 
port = 12345 
s.bind((host,port)) 
s.listen(5) 
while True: 
    c,addr = s.accept() 
    print "Got connection from",addr 
    c.send("Thank you for connecting") 
    c.close() 

客戶PY:

import socket 
import fcntl 
import struct 

def get_ip_address(ifname): 
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    return socket.inet_ntoa(fcntl.ioctl(
     s.fileno(), 
     0x8915, # SIOCGIFADDR 
     struct.pack('256s', ifname[:15]) 
    )[20:24]) 

#s = socket.socket() 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

host = get_ip_address("eth0")#replace with "wlan0" 
port = 12345 
s.connect((host,port)) 
print s.recv(1024) 
s.close 

check this警告:服務器py運行在shell(「python server.py」)上,客戶端運行在空閒狀態。