繁体   English   中英

客户端-服务器消息传递产生错误(Python-套接字编程)

[英]Client-Server messaging gives error (Python - socket programming)

我正在尝试使用python(不是python3)编写一个简单的客户端-服务器程序,每当我键入一条消息发送该消息时,都会出现各种错误,例如:

文件“”,第1行,你好,我叫darp ^ SyntaxError:语法无效

要么

文件“”,第1行,在NameError中:未定义名称“ hello”

要么

文件“”,第1行,您好世界^ SyntaxError:解析时出现意外的EOF

这是服务器代码:

import socket

def Main():
    host = socket.gethostname()
    port = 5000

    s = socket.socket()
    s.bind((host, port))

    s.listen(1)
    c, addr = s.accept()
    print("Connection from: "+str(addr))
    while True:
        data = c.recv(1024).decode('utf-8')
        if not data:
            break
        print("From connected user: "+data)
        data = data.upper()
        print("Sending: "+data)
        c.send(data.encode('utf-8'))
    c.close()

if __name__ == '__main__':
    Main()

这是客户端代码

import socket

def Main():
    host = socket.gethostname()
    port = 5000

    s = socket.socket()
    s.connect((host, port))

    message = input("-> ")
    while message != 'q':
        s.send(message.encode('utf-8'))
        data = s.recv(1024).decode('utf-8')
        print("Recieved from server: " + data)
        message = input("-> ")
    s.close()

if __name__ == '__main__':
    Main()

即使我可以创建此连接,但在键入消息后仍会出现问题。 任何帮助,将不胜感激,谢谢!

在Python2中,使用raw_input代替input

您应该使用raw_input代替input因为raw_input将捕获您的输入并将其转换为正确的类型。 使用input ,应在输入周围加上引号。

您可以在python文档中进行检查: https : //docs.python.org/2/library/functions.html#raw_input

就代码而言,您唯一需要在此处进行的更改就是服务器代码。 根据您的代码,将c.close()替换为s.close(),因为c是连接变量,而s是服务器的套接字。

在使更改按预期运行之后,我使您的代码运行,我在Python 3中执行了它。

服务器代码在这里:

import socket

def Main():
    host = "127.0.0.1"       # supply different hostname instead of socket.gethostname()
    port = 5000

    s = socket.socket()
    s.bind((host, port))

    s.listen(1)
    c, addr = s.accept()
    print("Connection from: "+str(addr))
    while True:
        data = c.recv(1024).decode('utf-8')
        if not data:
            break
        print("From connected user: "+data)
        data = data.upper()
        print("Sending: "+data)
        c.send(data.encode('utf-8'))
    s.close()           # it is s which indicates socket

if __name__ == '__main__':
    Main()

客户代码由您指定:

import socket

def Main():
# here, client is using the hostname whereas you need to give different 
# hostname for the server (127.0.0.1 for example) otherwise the code doesn't 
# work.You can do the reverse as well.
    host = socket.gethostname()
    port = 5000

    s = socket.socket()
    s.connect((host, port))

    message = input("-> ")
    while message != 'q':
        s.send(message.encode('utf-8'))
        data = s.recv(1024).decode('utf-8')
        print("Recieved from server: " + data)
        message = input("-> ")
    s.close()

if __name__ == '__main__':
    Main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM