0

我正在创建一个原始套接字服务器来教自己更多关于网络的知识。在我尝试创建它时,我决定尝试创建一个“聊天记录”。我的计划是让服务器后端脚本(支持 Tkinter GUI 的脚本)将所有发送的消息附加到一个名为old_msg.txt.

为此,我创建了一个名为old_msg. 它在这里定义。

def old_msg(data):
    while True:
        oldmsg = open("old_msg.txt", "a+")
        try:
            oldmsg.write("%s \n" % (data))
        except TypeError:
            print "SERVER MSG >>> NO MESSAGE SENT"
        oldmsg.close()

我在另一个函数中调用它,clientthread如果数据不为空,它会附加数据。

while True:

    #Receiving from client
    data = connection.recv(1024)
    if not data:
        break
    if data:
        connection.sendall(data)
        old_msg(data)
    print data

connection.close()

不同寻常的是,这段代码创建了一个UNIX_EXECUTABLE.It is called old_msg,下面是 shell 中显示的一些文本。这重复了数千次。

/Volumes/***'s USB/Python Programs/Sockets/IM Project/Server/Different Idea/old_msg: line 43159: hello: command not found
/Volumes/***'S USB/Python Programs/Sockets/IM Project/Server/Different Idea/old_msg: line 43160: hello: command not found
logout

为什么这段代码会创建一个 unix 可执行文件?

编辑

我向服务器发送了消息“Hello World”。你可以在这里找到 pastebin

4

3 回答 3

4

此代码写入一个old_msg.txt包含消息的文本文件,hello world. 此文本文件使用非 UNIX 文件系统(如 FAT32)写入 USB 磁盘或记忆棒。因此,文本文件默认设置了执行位。这是因为 FAT32 没有执行位,并且 Mac OS X 显示和使用的 UNIX 权限是由操作系统组成的。此外,Mac OS X 似乎对.txt您隐藏了扩展名(我相信这在 Finder 的设置中是可调的)。所以你得到了一个名为old_msg. 当您单击它运行它时,操作系统会尝试将其解释为脚本,这会导致您看到错误消息;消息的第一个单词hello world被解释为要运行的 UNIX 命令的文件名。

于 2013-03-15T20:57:37.593 回答
0

此代码不会创建 unix 可执行文件。但是不知何故,您已将文件的可执行位设置为 true。但是,您的代码不会这样做。

于 2013-03-15T20:46:04.253 回答
0

这是部分答案。我对其他人持开放态度——这只是我发现的。

我相信我的代码的问题是while Trueold_msg(data) 变量中的行。当我摆脱它时,没有创建脚本/exec/whatever-it-was。

问题是来自old_msg()函数的双循环和函数内的另一个循环clientthread

于 2013-03-15T20:49:11.013 回答