0

我正在通过一个简单的客户端-服务器示例来熟悉套接字和多线程。我在客户端有一个简单的 GUI,带有两个按钮——第一个生成一个 n 位大小的素数,第二个取消第一个的操作(因为制作 8000 位素数需要一些时间)。

当用户按下“生成”时,客户端将创建一个新线程。该线程创建了两个新线程,一个用于建立与服务器的连接,另一个不做任何事情,除非 GUI 请求“停止生成素数”。

服务器只是轮询连接。建立连接后,它会创建一个新线程来生成素数,然后将该素数返回给客户端。

这是我遇到概念问题的地方。如果我想在客户端实现“停止生成素数”按钮,我该怎么做?我最初的想法是使用第二个线程使用相同的套接字连接到服务器并告诉它“停止”。如何让服务器了解客户端请求的所有权?我怎样才能让服务器说“好的,客户端 A,我目前正在运行一个线程来创建一个大素数,但我现在看到您正在请求取消。” 如何让服务器对请求有归属感?

4

1 回答 1

0

开始的一种方法是为您的客户端服务器通信设置您自己的请求和响应消息。因为对服务器的每个新连接请求都会在服务器站点创建/使用一个专用线程,所以您可以继续与服务器通信,直到计算出素数并在用户单击停止按钮时传递 STOP 信号。下面是高级别的,您可以继续实施的一种方式。

T1 - 线程 1

客户

  • T1(对于带有两个按钮的 UI)在开始按钮上 -> 调用 ServerSocket 并传递消息“START PRIME n” 在停止按钮上 -> 调用 ServerSocket 并传递消息“STOP PRIME n”

    Request Messages 
    
    i.  START PRIME n
    ii. STOP PRIME n
    

服务器

  • 端口 5000 上的 T1(侦听客户端请求)根据客户端的请求:

    1. 从线程池示例章节分配一个新线程

      Response Messages 
      
      i.  PRIME VAL <result>
      ii. STOP PRIME COMPLETE
      
    2. 线程 T1 回到监听

希望这可以帮助!

于 2013-05-05T20:23:38.147 回答