客户端 - 服务器消息给出错误(Python的 - socket编程)

问题描述:

我想写使用Python(未python3)一个简单的客户端 - 服务器程序,每当我键入一个消息发送给了我不同的错误,如:客户端 - 服务器消息给出错误(Python的 - socket编程)

文件 “”,1号线 你好我的名字是DARP ^ 语法错误:无效的语法

OR

文件 “”,1号线,在 NameError:名字“地狱O”没有定义

OR

文件 “”,1号线 的hello world ^ 语法错误:意外的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

+0

这是一个耻辱的感谢,哈哈 –

,您应该使用raw_input代替input因为raw_input将捕获你的输入,并将其转换为适当的类型。当使用input时,应该在输入周围添加引号。

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

至于代码而言,你需要在这里做出的唯一的变化是在服务器代码。将c.close()替换为s.close(),因为c是连接变量,而s是服务器根据您的代码的套接字。

我使你的代码运行,使其运行作为expected.I在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()