2015-08-15 92 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”)上,客户端运行在空闲状态。