错误 - 全局名称 'SOL_SOCKET' 未定义
我正在尝试创建一个基本的即时消息程序,这个程序使用点对点(p2p)连接,所以不需要服务器。我觉得我的代码应该没问题,但每次运行我写的客户端程序时,都会出现这个错误:
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) NameError: global name 'SOL_SOCKET' is not defined
这是我的程序:
import socket
def Receiver():
# Create socket that supports IPv4, TCP Protocol
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket created."
# Requests for IP of host (DNS)
dns = "localhost"
HOST = ''
PORT = 25395
try:
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
except socket.error as serror:
print "socket error"
s.bind((HOST, PORT)) # Listens on all interfaces...
print 'Listening on port 25565'
s.listen(True) # Listen on the newly created socket...
conn, addr = s.accept()
print 'Connected in port 25565'
data = conn.recv(1024)
print data
s.close()
def Sender():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
dns = "localhost"
HOST = socket.gethostbyname(dns)
port = 25565
# Connect to server
s.connect((host,port))
print "Socket connected to " + dns + " on IP " + host
# Assign message to be sent to server to a variable
message = raw_input("Message to be sent to server: ")
#Send the actual message to server
s.sendall(message)
print "Message sent successfully"
s.close()
input = raw_input('S is send, R is receive: ')
if input == 's':
Sender()
if input == 'r':
Receiver()
我试过去掉 s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) 这行代码,但它告诉我不能在同一个端口上使用两个套接字,而实际上并没有两个套接字在使用同一个端口。
1 个回答
7
在你的代码中:
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
可以这样做:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# ^^^^ added ^^^
因为你只导入了 socket
,请查看以下代码片段:
>>> import socket
>>> SOL_SOCKET
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'SOL_SOCKET' is not defined
>>> socket.SOL_SOCKET
1