簡體   English   中英

使用一個TCP套接字python與多個客戶端進行通信

[英]Communicating with multiple clients using one TCP socket python

我正在使用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循環中,對於第二次迭代,我從鍵盤輸入的數據未到達服務器。 我需要重新啟動客戶端代碼才能再次發送數據。 我該如何解決 ?

另外,一旦客戶端連接到服務器,其他客戶端就無法連接到服務器。 有關如何執行此操作的任何想法?

您需要設計和實現一個協議,該協議指定雙方應該做什么,然后實現該協議。 您期望它通過魔術起作用。

例如:

data = clientsocket.recv(1024)

我懷疑您期望這會收到“消息”。 但是TCP沒有消息的概念。 如果需要發送和接收消息,則需要精確定義協議的“消息”是什么,並編寫代碼以發送和接收消息。

查看其他使用TCP的協議(例如HTTP,FTP或IRC)的規范可能會有所幫助。 在編寫任何代碼之前,確實值得花時間寫出協議規范。 它將節省很多痛苦。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM