Java 发送请求并处理多个线程通过套接字相互通信而不受干扰
我正在创建一个基于客户机-服务器模型的Java程序,在这个模型中,我需要服务器和客户机进行通信 更具体地说,我需要他们相互“下达命令”或请求,并在这些命令/请求中传输数据,你可以看到我试图实现的东西看起来像一个方法,但这些“方法”不是在本地发生的,而是由一方调用,由另一方执行 例如,一种可能的情况是:Java 发送请求并处理多个线程通过套接字相互通信而不受干扰,java,multithreading,sockets,Java,Multithreading,Sockets,我正在创建一个基于客户机-服务器模型的Java程序,在这个模型中,我需要服务器和客户机进行通信 更具体地说,我需要他们相互“下达命令”或请求,并在这些命令/请求中传输数据,你可以看到我试图实现的东西看起来像一个方法,但这些“方法”不是在本地发生的,而是由一方调用,由另一方执行 例如,一种可能的情况是: 服务器正在侦听订单 客户端尝试进行身份验证 并将用户名和密码发送到服务器 服务器接收 身份验证请求控制用户名和 密码正确,并向客户端报告 客户是 现已认证 服务器再次侦听订单 现在,我的第一个想法
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF("requestAuth");
dos.writeUTF(username);
dos.writeUTF(password);
和服务器:
DataInputStream dis = new DataInputStream(socket.getInputStream());
if(dis.readUTF().equals("requestAuth")){
String username = dis.readUTF();
String password = dis.readUTF();
//Check whether they're correct or not bla bla bla
}
对我来说,这似乎不是最好的选择,我认为有更好的方法可以做到这一点,但我只是不知道如何做到,我已经寻找了一个更好的解决方案,但什么也没有找到
出现的另一个问题是,我需要服务器和客户端能够同时发送这些请求,并且这些请求可以随时异步发送
例如:假设客户端正在进行身份验证,它正在发送用户名、密码等。。。但与此同时,服务器希望检查客户端是否仍然连接,因为线程每秒都在连接,我如何确保每个信息都在正确的位置传递,而不会阻塞流或线程接收不需要的数据?如果客户端正在等待知道用户名和密码是否正确,我不想让另一个线程的请求阻塞它,因为它正在做完全不同的事情
基本上:我的客户机/服务器程序可以是多线程的,套接字也可以吗?我可以让线程服务器A与线程客户端A通信,线程服务器B与线程客户端B通信而不相互干扰吗?我可以从同一个套接字中获得多个流并分别处理它们吗?你看过吗?是的,但在这种情况下,他只读和写了一次。我需要能够同时阅读两个不同的来源,例如:服务器需要能够在一个线程中侦听一个字符串,在另一个线程中侦听另一个字符串,而无需这些字符串交换并进入错误的线程查看ThreadLocal类的方向以存储线程相关的值并对其进行操作-请参阅,例如,你看过吗?是的,但在这种情况下,他只读和写了一次。我需要能够同时阅读两个不同的来源,例如:服务器需要能够在一个线程中侦听一个字符串,在另一个线程中侦听另一个字符串,而无需这些字符串交换并进入错误的线程查看ThreadLocal类的方向以存储线程相关的值并对其进行操作-例如,请参阅