【发布时间】:2010-05-30 04:37:55
【问题描述】:
我目前正忙于为使命召唤 1 的早期版本开发 IP 禁止工具。(显然这些版本中没有实现这样的功能)。
我已经完成了一个单线程应用程序,但它对于多台服务器的性能不够好,这就是我尝试实现线程的原因。
现在,每个服务器都有自己的线程。我有一个 Networking 类,它有一个方法; “GetStatus”——这个方法是同步的。此方法使用 DatagramSocket 与服务器通信。由于此方法是静态和同步的,因此我不应该遇到麻烦并收到一大堆“地址已在使用”异常。
但是,我有第二种方法,名为“SendMessage”。此方法应该向服务器发送消息。当“GetStatus”中已经有一个线程正在运行时,我如何确保不能调用“SendMessage”,反之亦然?如果我使两者同步,如果线程 A 在端口 99999 上打开一个套接字并调用“SendMessage”,而线程 B 在同一端口上打开一个套接字并调用“GetStatus”,我仍然会遇到麻烦? (游戏服务器通常托管在相同的端口上)
我想我真正追求的是一种使整个类同步的方法,以便单个线程一次只能调用和运行一个方法。
希望我试图完成/避免的事情在本文中得到明确。
非常感谢任何帮助。
【问题讨论】:
-
顺便说一句,99999 不是有效端口 - 端口是 16 位无符号数字
-
SendMessage 和 GetStatus 是在什么情况下同步的?
-
端口 99999 只是一个例子,如果我写了,你能告诉我“端口 XXXXX”不是有效端口吗?那么“端口
”呢?
标签: java multithreading sockets