Python套接字程序-name错误:name';自我';没有定义。我更改了本地主机、端口等,但此错误仍然存在
husainshoab@hs-Len:~$python IOTDeviceSocket.py 回溯(最近一次呼叫最后一次): 文件“IOTDeviceSocket.py”,第7行,在 类ClientSocket: ClientSocket中第11行的文件“IOTDeviceSocket.py” self.soc=无Python套接字程序-name错误:name';自我';没有定义。我更改了本地主机、端口等,但此错误仍然存在,python,linux,sockets,self,Python,Linux,Sockets,Self,husainshoab@hs-Len:~$python IOTDeviceSocket.py 回溯(最近一次呼叫最后一次): 文件“IOTDeviceSocket.py”,第7行,在 类ClientSocket: ClientSocket中第11行的文件“IOTDeviceSocket.py” self.soc=无 名称错误:未定义名称“self”您的代码似乎没有问题。我只是用它来创建一个简单的测试应用程序 import socket MAX_BUFFER_SIZE = 4096 class
名称错误:未定义名称“self”您的代码似乎没有问题。我只是用它来创建一个简单的测试应用程序
import socket
MAX_BUFFER_SIZE = 4096
class ClientSocket:
def __init__(self):
print("Client socket started....")
self.soc = None
def send_to_Server(self, data):
print('Time to send data to Server..... %s', data)
self.soc.send(data.encode("utf8"))
def receive_from_Server(self):
print('Time to receive from Server.....')
result_bytes = self.soc.recv(MAX_BUFFER_SIZE)
result_string = result_bytes.decode("utf8")
print("Result from server is {}".format(result_string))
def start_client(self):
self.soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.soc.connect(("localhost", 8000))
print('Client connected....')
这里有一个简单的测试服务器,它只回吐一些JSON数据
# ClientSocket.py
import socket
MAX_BUFFER_SIZE = 4096
class ClientSocket:
def __init__(self):
print("Client socket started....")
self.soc = None
def send_to_Server(self, data):
print('Time to send data to Server..... %s', data)
self.soc.send(data.encode("utf8"))
def receive_from_Server(self):
print('Time to receive from Server.....')
result_bytes = self.soc.recv(MAX_BUFFER_SIZE)
result_string = result_bytes.decode("utf8")
print("Result from server is {}".format(result_string))
def start_client(self):
self.soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.soc.connect(("localhost", 8000))
print('Client connected....')
cs = ClientSocket()
cs.start_client()
cs.send_to_Server('Hello')
cs.receive_from_Server()
#test_server.py
导入套接字
从日期时间导入日期时间
导入json
def日志消息(客户端消息):
logTime=datetime.today();
msg=“{}}{}\n”。格式(logTime,clientMessage)
打印味精
TCP_端口=8000
服务器=socket.socket(socket.AF\u INET,socket.SOCK\u流)
绑定(('localhost',TCP_端口))
#listen()将套接字置于服务器模式,
服务器。听(1)
尽管如此:
#等待传入连接
连接,地址=server.accept()
尝试:
#接收64字节的数据块
尽管如此:
数据=connection.recv(64)
#我们如何知道我们是否收到了所有数据?
如果数据:
#我们从客户端收到数据,将其记录到文件中
日志信息(数据)
答复={
“姓名”:“乔纳森·斯威夫特”,
“职业”:“作者”
}
jsonResponse=json.dumps(响应)
messageLength=len(jsonResponse)
bytesSent=0
#在将我们的dict转换为
#JSON字符串
while(bytesent
您应该在class语句之后定义soc变量,以便全局使用。您能告诉我们如何实例化这个类吗?您是否有类似于
client\u socket=ClientSocket()
的行,您能否修复问题中的缩进并演示如何运行此代码?间距是问题的格式问题,而不是原始问题。如果脚本的间距与问题中的间距完全相同,则会抛出一个缩进错误,因为类定义hmm之后预期会有一个缩进块。这是有效的Python代码。他定义了一个空类<代码>self不会在方法中定义,因此问题是,“self未定义”a)它不是有效的代码,在类主体中必须至少有一个通过。b) 即使它是有效的,那么self
将是函数的第一个参数,因此将被定义为ah,是的,你是对的。全班一定要通过考试。非常努力。我怀疑OP执行代码的方式有问题,而不是类在python中的工作方式。您不需要以这种方式声明类变量。此外,问题与self
有关,而不是与soc
有关。他在每个类中访问soc变量就像self.soc一样,因此python可能会找到未定义的ClientSocket类的全局变量soc……我猜您对python中的OOP并不十分熟悉。试一下,这样就可以了。您不需要显式定义类变量,只需将值指定给self即可。。另外:OP报告的错误不是soc未定义
,而是self未定义
@SR\u Mehta:self.soc
是在\uu init\uuuuuuuuuuuuuuuuuuuuuuuuu()
上定义的,所以这不是一个问题。@giacomocomocatenazzi您甚至不需要在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(尽管这可能被认为是糟糕的风格)
# test_server.py
import socket
from datetime import datetime
import json
def logMessage(clientMessage):
logTime = datetime.today();
msg = "{} | {}\n".format(logTime, clientMessage)
print msg
TCP_PORT = 8000
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', TCP_PORT))
# listen() puts the socket into server mode,
server.listen(1)
while True:
# wait for an incoming connection
connection, address = server.accept()
try:
# receive data in chunks of 64 bytes
while True:
data = connection.recv(64)
# how do we know if we received all the data?
if data:
# we received data from the client, log it to the file
logMessage(data)
response = {
'name' : 'Jonathan Swift',
'occupation' : 'author'
}
jsonResponse = json.dumps(response)
messageLength = len(jsonResponse)
bytesSent = 0
# send a response to the client after turning our dict into
# a JSON string
while(bytesSent < messageLength):
sent = connection.send(jsonResponse)
bytesSent += sent
else:
# no data, break out of receiving loop
break
except Exception as e:
raise
finally:
connection.close()
import socket
MAX_BUFFER_SIZE = 4096
class ClientSocket:
soc = None
def __init__(self):
print("Client socket started....")
self.soc = None
def send_to_Server(self, data):
print('Time to send data to Server..... %s', data)
self.soc.send(data.encode("utf8"))
def receive_from_Server(self):
print('Time to receive from Server.....')
result_bytes = self.soc.recv(MAX_BUFFER_SIZE)
result_string = result_bytes.decode("utf8")
print("Result from server is {}".format(result_string))
def start_client(self):
self.soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.soc.connect(("localhost", 8000))
print('Client connected....')