首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python套接字程序- NameError:未定义名称'self‘。我更改了localhost、端口等,但此错误不会消失

Python套接字程序- NameError:未定义名称'self‘。我更改了localhost、端口等,但此错误不会消失
EN

Stack Overflow用户
提问于 2018-03-28 14:43:07
回答 2查看 1K关注 0票数 0
代码语言:javascript
复制
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....')

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

回溯(最近一次调用):类ClientSocket中的文件"IOTDeviceSocket.py",第7行:文件"IOTDeviceSocket.py",第11行,ClientSocket self.soc = None NameError:名称'self‘未定义

EN

回答 2

Stack Overflow用户

发布于 2018-03-28 14:49:07

您的代码似乎没有任何问题。我只是用它创建了一个简单的测试应用程序

代码语言:javascript
复制
# 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()

下面是一个简单的测试服务器,它只返回一些JSON数据

代码语言:javascript
复制
# 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()
票数 2
EN

Stack Overflow用户

发布于 2018-03-28 14:51:29

代码语言:javascript
复制
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....')

您应该在class语句之后定义soc变量,以便可以全局使用它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49527766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档