Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字程序-name错误:name';自我';没有定义。我更改了本地主机、端口等,但此错误仍然存在_Python_Linux_Sockets_Self - Fatal编程技术网

Python套接字程序-name错误:name';自我';没有定义。我更改了本地主机、端口等,但此错误仍然存在

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

husainshoab@hs-Len:~$python IOTDeviceSocket.py

回溯(最近一次呼叫最后一次): 文件“IOTDeviceSocket.py”,第7行,在 类ClientSocket: ClientSocket中第11行的文件“IOTDeviceSocket.py” self.soc=无
名称错误:未定义名称“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....')