客户端 - 服务器聊天python错误

时间:2013-12-30 00:50:24

标签: python client-server

我正在尝试以下客户端和服务器聊天程序。虽然每当我尝试运行服务器程序时都会收到错误,但是当客户端程序运行时,它会保留在空白屏幕上,不允许我输入任何内容。我已经尝试先运行服务器并首先运行客户端,我得到相同的结果。我无法从服务器程序中读取错误,因为它会闪烁错误并关闭窗口。这是我的代码:

服务器:

 #server
 import socket
 import time

 HOST = ''
 PORT = 8065
 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 s.bind((HOST,PORT))
 s.listen(1)
 conn, addr = s.accept()
 print 'Connected by', addr
 while 1:
     data = conn.recv(1024)
     if not data: break
     conn.sendall(data)
 conn.close()

客户端:

  #client
  import socket
  import time

  HOST = "localhost"
  PORT = 8065
  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  s.connect((HOST,PORT))
  s.sendall('Helloworld')
  data = s.recv(1024)
  s.close()
  print 'Recieved', repr(data)

1 个答案:

答案 0 :(得分:1)

我不是专家,但是我能够通过将套接字从数据报更改为流连接,然后编码发送的消息因为不支持字符串而使您的示例工作(尽管这可能不会影响您,因为我认为更改是用Python 3制作的......我不是百分百肯定的。

我认为主要的问题是你正在尝试listen()但是SOCK_DGRAM(UDP)不支持listen(),你只需绑定并从那里开始,而SOCK_STREAM(TCP)使用连接。

如果您只是想让程序继续运行,请使用以下代码,除非您有特殊原因要使用SOCK_DGRAM。

代码如下:

客户端

#client
import socket
import time

HOST = "localhost"
PORT = 8065
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
test = 'Helloworld'
s.sendall(test.encode())
data = s.recv(1024)
s.close()
print 'Recieved', repr(data)

服务器

#server
import socket
import time

HOST = ''
PORT = 8065

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(1)
conn, addr = s.accept()
print ('Connected by', addr)
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()