客户端 - 服务器消息给出错误(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
。
答
,您应该使用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()
这是一个耻辱的感谢,哈哈 –