使用套接字的Python Multiclient多线程服务器

时间:2016-11-15 10:55:49

标签: python python-3.x sockets client-server python-multithreading

我正在尝试使用Python 3.5.2上的套接字编程创建一个简单的多客户端服务器架构。这是我创建服务器客户端程序的第一次体验。这是一个测验程序,通过浏览器使用HTML文件向客户端询问每个问题,并将答案发送回服务器以计算客户点数。为了将客户端连接到托管HTML文件和客户端结果的Web服务器,我使用中间服务器充当客户端和Web服务器之间的桥梁。为清晰起见,您可以看到下图:

enter image description here

我使用非常简单的HTML文件来解决以下问题:

<html>
<head>
    <title>Quiz</title>
</head>

<body>
    <h1>Question 1</h1>
    <p>Which of the followings is the 45th elect president of the United States?

    <form action="/Question_2.html" method="post">
        <input type="radio" name="answer" value="trump">Donald J. Trump<br>
        <input type="radio" name="answer" value="clinton">Hillary Clinton<br>
        <input type="radio" name="answer" value="obama">Barrack Obama
        <br><br>
        <button type="submit">Submit</button>
    </form>


</body>

</html>

当客户选择答案并提交时,答案将发送到Web服务器,下一个问题将显示在同一浏览器选项卡上。现在,问题在于每次为新问题打开新的浏览器窗口时,自然会创建一个新的套接字并连接到多路复用服务器。以下代码来自MultiplexingServer.py:

MultiplexingServerName = 'localhost'
MultiplexingServerPort=12000

MultiplexingServerSocket = socket(AF_INET,SOCK_STREAM)
MultiplexingServerSocket.bind((MultiplexingServerName, MultiplexingServerPort))
MultiplexingServerSocket.listen(1)
while True:

    print ('Ready to serve on port' ,MultiplexingServerPort)

    ConnectionSocket, address =  MultiplexingServerSocket.accept()

例如,当我打开浏览器并输入URL“http://localhost:12000/Question_1.html”时,我连接没有问题,我可以继续处理下一个问题并将答案发送到Web服务器。但是,由于新页面意味着新的套接字和地址,因此我在Web服务器上获得输出,例如:

Message recieved from multiplexer server: 2,trump,127.0.0.1:58594
Given answer: trump
Message recieved from multiplexer server: 3,staryu,127.0.0.1:58596
Given answer: staryu
Message recieved from multiplexer server: 4,oak,127.0.0.1:58598
Given answer: oak
Message recieved from multiplexer server: 5,rengar,127.0.0.1:58600
Given answer: rengar

我如何区分这些答案是从同一个人那里得到的,因为新的套接字被创建并且每个新问题(页面)的地址都在变化?我可以使用什么样的解决方法?

0 个答案:

没有答案