【问题标题】:Communicating with multiple clients using one TCP socket python使用一个 TCP 套接字 python 与多个客户端通信
【发布时间】:2015-03-30 08:34:08
【问题描述】:

我正在使用 TCP 套接字在我的服务器和客户端之间进行通信。服务端代码和socket代码如下:

服务器:

from socket import *

HOST = 'xx.xx.xx.xx'
PORT = 1999
serversocket = socket(AF_INET,SOCK_STREAM)
serversocket.bind((HOST,PORT))
print 'bind success'
serversocket.listen(5)
print 'listening'
while True:
    (clientsocket, address) = serversocket.accept()
    print ("Got client request from",address)
    #clientsocket.send('True')
    data = clientsocket.recv(1024)
    print data
    clientsocket.send('True')
    clientsocket.close()

客户:

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port on the server given by the caller
server_address = ('xx.xx.xx.xx', 1999)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)

try:

    message = 'This is the message.  It will be repeated.'
    print >>sys.stderr, 'sending' 
    for x in range (0,1):
      name=raw_input ('what is ur name')
      print type(name)
      sock.send(name)
      print sock.recv(1024)

finally:
    sock.close()

我能够从客户端与服务器通信,并且能够发送和接收数据。但我面临的问题是我无法从服务器连续发送和接收数据。我必须在笔记本电脑上重新启动客户端代码才能再次从服务器发送和接收数据。上述客户端代码的工作方式是,当我给键盘输入时,套接字将数据发送到服务器,服务器响应。但是在客户端代码中,如果我进行两次迭代,则在 for 循环中,对于第二次迭代,我从键盘输入的数据没有到达服务器。我需要重新启动客户端代码才能再次发送数据。我该如何解决这个问题?

另外,当客户端连接到服务器时,另一个无法连接到服务器。关于如何做到这一点的任何想法?

【问题讨论】:

  • 不要关闭套接字?重新连接socket?
  • 是否存在重新连接套接字的命令?
  • 你试过sock.connect(server_address)吗?

标签: python sockets tcp


【解决方案1】:

您需要设计和实施一个协议,指定每一方应该做什么,然后实施该协议。你期待它神奇地发挥作用。

例如:

data = clientsocket.recv(1024)

我怀疑您希望这会收到一条“消息”。但是 TCP 没有消息的概念。如果您需要发送和接收消息,您需要为您的协议准确定义什么是“消息”并编写代码来发送和接收它们。

查看使用 TCP 的其他协议(例如 HTTP、FTP 或 IRC)的规范可能会有所帮助。在编写任何代码之前,花时间编写协议规范确实是值得的。它会节省很多的痛苦。

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 2013-10-24
    • 2016-01-05
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多