首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速NSSocket编程/python教程修复

快速NSSocket编程/python教程修复
EN

Stack Overflow用户
提问于 2016-03-11 15:09:50
回答 1查看 208关注 0票数 2

我对python几乎一无所知,但我正在尝试学习关于NSSockets的一个教程,它使用Python。这是python脚本。脚本是用python2编写的,但我必须在python 3下运行它。

代码语言:javascript
复制
from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor

class IphoneChat(Protocol):
def connectionMade(self):
    self.factory.clients.append(self)
    print("clients are ", self.factory.clients)

def connectionLost(self, reason):
    self.factory.clients.remove(self)

def dataReceived(self, data):
    a = data.split(':')
    print(a)
    if len(a) > 1:
        command = a[0]
        content = a[1]

        msg = ""
        if command == "iam":
            self.name = content
            msg = self.name + " has joined"

        elif command == "msg":
            msg = self.name + ": " + content
            print(msg)

        for c in self.factory.clients:
            c.message(msg)

def message(self, message):
     self.transport.write(message + '\n')


factory = Factory()
factory.protocol = IphoneChat
factory.clients = []
reactor.listenTCP(80, factory)
print("Iphone Chat server started")
reactor.run()

它可以工作,但是当我试图连接我的Swift代码时,它会与这条消息一起崩溃。

代码语言:javascript
复制
File "server.py", line 13, in dataReceived
a = data.split(':')
builtins.TypeError: a bytes-like object is required, not 'str'

抱怨我发送的数据格式错误;这是发送消息的快速代码。

代码语言:javascript
复制
func sayhello() {
    let response = String(format:"iam:brian")
    let dataToSend = [UInt8](response.utf8)
    outputStream?.write(dataToSend, maxLength: dataToSend.count)
}

我怎么才能治好巨蟒和巨蟒呢?我正在努力学习/翻译的教程已经出版了。

https://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-12 05:15:31

多亏了https://stackoverflow.com/users/1076479/gil-hamilton链接,我终于找到了我正在看的东西。解决方案。我使用的是我在这里发布的相同的快速代码,我删除了python的最后一节。我正在发送和接收这个。

代码语言:javascript
复制
Iphone Chat server started
clients are  [<__main__.IphoneChat object at 0x1035039e8>]
b'iam:brian'

现在我知道了问题的所在,用巨蟒我可以找到答案!我基本上在python脚本中删除了这个。

代码语言:javascript
复制
def dataReceived(self, data):
a = data.split(':')
print(a)
if len(a) > 1:
    command = a[0]
    content = a[1]

    msg = ""
    if command == "iam":
        self.name = content
        msg = self.name + " has joined"

    elif command == "msg":
        msg = self.name + ": " + content
        print(msg)

    for c in self.factory.clients:
        c.message(msg)

def message(self, message):
 self.transport.write(message + '\n')

用这个代替它..。

代码语言:javascript
复制
def dataReceived(self, data):
    print(data)
    dumb=data.decode('utf8')
    print(dumb)

太简单了,太蠢了.

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

https://stackoverflow.com/questions/35943613

复制
相关文章

相似问题

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