2015-06-21 24 views
1

每当它尝试连接到我的python套接字服务器时,我的客户端崩溃。我不知道为什么,但除了我的服务器接缝启动罚款,然后当我启动我的客户端它建立了一个连接到服务器,但它直接崩溃。我正在做他们在py socket docs中所说的那样,所以即时通讯想知道我是否错过了某些东西,或者只是盲目地盯着一些简单的东西。任何人都可以使用python3.4来帮助我。每当它尝试连接到我的python套接字服务器时,我的客户端崩溃了。

server.py

import socket 

host = '' 
port = 1010 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host, port)) 
s.listen(1) 
conn, addr = s.accept() 
print ("Connection from", addr) 
while True: 
    databytes = conn.recv(1024) 
    if not databytes: break 
    print("Recieved: "+(databytes.decode('utf-8'))) 
    response = input("Reply: ") 
    if response == "exit": 
     break 
    conn.sendall(response.encode('utf-8')) 
conn.close() 

client.py

import socket 

host = '127.0.0.1' 
port = 1010 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((host, port)) 
print("Connected to "+(host)+" on port "+str(port)) 
initialMessage = input("Send: ") 
s.sendall(initialMessage.encode('utf-8')) 

while True: 
data = s.recv(1024) 
print("Recieved: "+(data.decode('utf-8'))) 
response = input("Reply: ") 
if response == "exit": 
    break 
s.sendall(response.encode('utf-8')) 
s.close() 
+0

当客户端崩溃时,您获得的输出是什么? –

+0

服务器说它从<'127.0.0.1',60326>得到了一个连接,客户端在它的Traceback(最近调用最后一个)python shell中没有提供任何命令promp: 文件“C:\ Python34 \ client”。 py“,第9行,在 initialMessage = raw_input(”Send:“) NameError:名称'raw_input'未定义 –

+0

请看看我的答案。 –

回答

1

,我们在您的服务器/客户端程序两个问题。

  1. 你的服务器有两个accept()电话,while循环前,while循环中,这将导致服务器实际上等待两个连接之后,才能开始从任何客户端接收的任何消息。

  2. socket.sendall()函数需要bytes不是字符串,所以您需要在发送数据之前使用某种合适的编码将字符串编码为字节。此外,函数 - socket.recv() - 返回字节。因此,您需要解码字节数据(使用与发送时用于编码的编码相同的编码),以便可以返回正确的字符串并将其打印出来。一个合适的编码可以是 - utf-8 - 但你可以使用任何你选择的编码。

编码串,并使用sendall() FUNC的一个例子 -

s.sendall(response.encode('utf-8')) 

接收数据时解码所述串的例子 -

databytes = conn.recv(1024) 
if not databytes: break 
data = databytes.decode('utf-8') 

你并不neccessarily需要存储在另一个变量中解码后的值,你也可以在打印数据时直接调用.decode('utf-8')函数,如 - print("Recieved: "+(data.decode('utf-8')))

+0

是的,我知道我有两个接受()扼杀与循环中的服务器崩溃时,我与客户端连接。 –

+0

有两个问题,我描述,请检查它 –

+0

好吧,我改变了代码,并在我原来的问题更新现在事情开始工作,但我有一个新的错误服务器端打印(“Recieved:”+(data.decode( 'utf-8'))) AttributeError:'str'对象没有属性'decode' –

相关问题