使用一个TCP套接字python与多个客户端进行通信

时间:2015-03-30 08:34:08

标签: python sockets tcp

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

服务器:

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循环中,对于第二次迭代,我从键盘输入的数据不会到达服务器。我需要重新启动我的客户端代码才能再次发送数据。我该如何解决这个问题?

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

1 个答案:

答案 0 :(得分:0)

您需要设计并实现一个协议,指定每一方应该做什么,然后实现该协议。你希望它能通过魔法发挥作用。

例如:

data = clientsocket.recv(1024)

我怀疑你期待收到“消息”。但TCP没有消息的概念。如果需要发送和接收消息,则需要准确定义协议的“消息”,并编写代码以发送和接收消息。

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