Python套接字聊天程序在远程系统中不起作用

时间:2015-10-20 09:22:07

标签: python sockets network-programming chat

我有一个python聊天程序server.py和client.py。它可以在我的本地系统中运行,但是当我尝试连接到koding.com ubuntu-vm或cloud9 ubuntu-vm这样的远程主机时,它无效。

我无法通过网络访问远程客户端。

link表明了我的一些问题。

我的目标是使用互联网而不是局域网进行聊天

这是聊天服务器.py

import socket
import thread

HOST = ''               
PORT = 4444                      
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

while True:
  s.listen(1)
  conn, addr = s.accept()
  print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if data[:4] == "exit":
        print 'Parted by', addr
    else:
        conn.send(data),
    if not data:
        break
    print data
conn.close

这是聊天client.py

import socket
getHOST = (raw_input('Enter the Host: '))
print getHOST
HOST = getHOST
PORT = 4444        
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

NICK = raw_input('Welcome, Enter your name: ')

while True:
  MSG = raw_input('>> ')
  MSG = NICK + ': ' + MSG
  if MSG[5:] == "exit":
    break
  s.send(MSG)
  data = s.recv(1024)
 print data  
s.close()

1 个答案:

答案 0 :(得分:4)

您的server.py甚至不应该在本地工作,因为它包含错误。

  • 您必须在单独的线程中处理每个传入的套接字连接。
  • 您必须只调用s.listen(1)一次,而不是无限循环。

我建议您更改server.py,如下所示:

import socket
import thread

def handleChat(conn, addr):
    print 'Connected by', addr

    while 1:
        data = conn.recv(1024)
        if data[:4] == "exit":
            print 'Parted by', addr
        else:
            conn.send(data),
        if not data:
            break
        print data
    conn.close


def main():
    HOST = ''     
    PORT = 4444
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)

    while True:
        conn, addr = s.accept()
        thread.start_new_thread(handleChat, (conn, addr,))


if __name__ == "__main__":
    main()

然后将它放在您的服务器上,说example.com,然后运行它。它应该现在可以正常工作,正如我测试过的那样。