**
将有多个客户端在端口6069上向服务器发送消息。我希望同时处理多个请求,但我不确定下面的代码是否可以执行此操作。
套接字队列上会有请求。由于只有一个线程,它将在一个请求上执行其迭代,然后它将从队列中获取下一个请求。如何同时为多个客户提供服务?
这是创建侦听端口6069的线程的类。
public class NetworkModule extends Thread {
private ServerSocket serverSocket;
public NetworkModule(int port) throws IOException {
serverSocket = new ServerSocket(port);
}
public void run() {
while (true) {
/* Here I read strings from the inputstream and write
to outputstream corresponding to "serverSocket" and call
functions from other classes*/
}
}
}
下面是Main类的样子
public class Main
{
public static void main(String[] args)
{
try
{
int port=6069;
Thread t = new NetworkModule(port);
t.start();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
如果您可以隔离客户端处理方法,请在新的类Thread
中说明,该类也会扩展run()
run()
中您读取和写入流的位置。然后在NetworkModule
的{{1}}中填写
while (true) {
Socket socket = serverSocket.accept(); // blocks until new client connects
ClientHandler handler = new ClientHandler(socket); // pass reference to socket
handler.start(); // start executing in new thread
}
通常,implement Runnable
而不是extending Thread
更好,因为您可以实现许多接口,但由于Java继承模型,只能从单个类扩展。
答案 1 :(得分:0)
这不是编写服务器程序的好方法!
你最好有两个班级:
1)client_handler:一个处理客户端并负责为客户提供服务的类。让我们将它命名为client_handler.java。
应为连接到服务器的每个客户端创建此类的一个对象
客户端应该并行获取服务,因此,此类应该扩展Thread或实现Runnable
接口。
2)服务器: 等待客户端连接的另一个类!我们将它命名为:server.java
这个类将实现main
方法!
服务器类应该在每个连接上创建一个新线程,以便客户端可以并行获取服务。
**********************************
下面,有一些代码可以证明我上面讲的内容:
/*this is the server class i talked about : */
public class server{
static void main (String args[]){
ServerSocket ss = new ServerSocket (args[0]);
while (true){
Socket s = ss.accept();
client_handler ch = new client_handler(s);
Thread t = new Thread(ch);
t.start();
}
}
}
以下是client_handler的示例代码:
public class client_handler implements Runnable{
private Socket s ;
private Scanner in ;
print PrintWriter out;
public client_handler(Socket s){
this.s =s;
in= new Scanner(s.getInputStream());
out= new PrintWriter(s.getOutputStream());
}
public void run(){
// this is the entry of your thread .
// you can analyse the request received here . and send responses !
}
}
答案 2 :(得分:-1)
您应该以这样的方式更改代码,以便从服务器端提供访问权限,以便更多客户端访问(处理)通过端口6069发送的数据。 您的第二个客户端应用程序只是简单的,具有连接到活动服务器的实现逻辑(如果有的话,或基于某些规则等)。 服务器应用程序可以提供访问权限。这意味着每个客户端都可以查看其他客户端发送的每条消息,反之亦然。
我认为阅读有用:Knock Knock Protocol。它将向您解释如何管理事物并且它们适用于您的情况。