当前位置: 首页 > 知识库问答 >
问题:

接受多个客户端的服务器-不工作

洪飞驰
2023-03-14

下面是服务器接受多个客户端连接并响应的代码。服务器能够接收客户端的消息,但客户端没有接收服务器消息。我在服务器上使用了多线程概念。我还观察到,除了标有 ####. 的行之外,没有任何工作(即使是println语句)可能是客户端被阻止了...有什么想法吗?服务器代码:公共静态无效main(String artv[])抛出异常{

     ServerSocket welcomeSocket = new ServerSocket(10000);

     while(true)
     {

        Socket connectionSocket = welcomeSocket.accept(); 

        Thread t = new Thread(new acceptconnection(connectionSocket));
        t.start();}}


   class acceptconnection implements Runnable{
            BufferedReader inFromClient,inn;
                DataOutputStream ds;
             Socket clientsocket;
        //constructor
        acceptconnection (Socket socket) throws IOException{
        this.clientsocket = socket;
        inn = new BufferedReader (new InputStreamReader(System.in));
        inFromClient =new BufferedReader(new  InputStreamReader(clientsocket.getInputStream()));
        ds = new DataOutputStream(clientsocket.getOutputStream());

         public void run (){
         try {
        String clientSentence, inp;
         while(( clientSentence = inFromClient.readLine())!=null)
         {
               System.out.println("from client" + clientSentence);
               ds.writeBytes("hi from server");**// THIS DOES NOT WORK**
         }

    }


  Client code:

     public static void main(String argv[]) throws Exception
   {

  Socket clientSocket;
   while(true)
  {
   // clientSock
    clientSocket = new Socket("localhost", 10000);
  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));

  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new    InputStreamReader(clientSocket.getInputStream()));

  System.out.println("Enter something:"); 
  sentence = inFromUser.readLine();  
  outToServer.writeBytes(sentence + '\n');// THIS WORKS - thats why server receives it

  **####** modifiedSentence = inFromServer.readLine();**// THIS DOES NOT WORK -client unable to receive** 

  System.out.println("FROM SERVER: " + modifiedSentence + "remote sock add: "+      clientSocket.getRemoteSocketAddress());

共有2个答案

龙承德
2023-03-14

您应该在服务器端刷新流

 ds.writeBytes("hello world".getBytes());
 ds.flush();
云伯寅
2023-03-14

当您使用BufferedReader时。readLine()在客户端中,确保在写入数据时使用换行符:

ds.writeBytes("hi from server\n"); 

而且,如前所述,记得冲洗。。。

ds.flush();
 类似资料:
  • 我正在开发一个具有多个客户端的标准java RMI服务器。这些客户机有一个菜单,在那里他们可以调用服务器为他们做各种事情。 一种方法涉及一个队列,他们可以在其中将作业发送到队列并等待它得到处理。RMI服务器自动为所有客户端处理线程,但当涉及到此方法和队列时,我如何阻止此请求,例如: 首先调用客户端1,然后再调用客户端2(此处客户端1应首先从服务器接收消息,客户端2应等待服务器处理客户端1请求所需的

  • 问题内容: 我有一个带有两个服务器端进程的程序。一台服务器只是将ArrayList发送给客户端。另一个服务器首先从客户端获取一个字符串,然后找到与该ID对应的正确记录,然后将记录发回。 我在第二个服务器进程中遇到问题。请参阅下面的println语句,其中显示“卡在此处”。那就是程序挂起的地方。 客户端: 问题答案: 您需要在两端的ObjectInputStream之前创建ObjectOutputS

  • 我刚刚开始使用Sockets,对于我当前的项目,我需要能够从客户端控制我的程序,但是如果我的项目合作伙伴想同时使用他的客户端,服务器不会向他发送“您已连接”消息,如连接类所示。所以我假设服务器不同时接受多个客户端。我尝试过使用类Connection的Thread,但这也不会向第二个客户端发送消息“您已连接”。我在这里做错了什么? 这是我用来同时连接多个用户的线程: 编辑:附加信息 在第一个客户端连

  • 我正在尝试基于非阻塞NIO消息开发自己的通信库。我已经阅读了1000篇关于它的教程和书中的章节,我认为最后我有了一些可以在几乎没有同时连接的情况下工作的东西。但是当我在服务器端有很多连接共存时,我遇到了一些问题。 我有4个私有方法的典型选择器实现:accept、finishConnect、read和write。我的问题在于前两个:接受和完成连接。 当客户端打开一个新的套接字,并且一个可接受的键唤醒

  • 我有一个java服务器应用程序,可以通过与多个客户端通信。在这个通道上,客户端发送请求,服务器发送应答。现在我想添加一个功能,服务器可以将文件发送到客户端。我不想通过用于通信的套接字发送,所以在一个客户端和一个服务器之间使用更多套接字是个好主意吗?如果是,如何处理?我用过这样的东西吗? 还是有更好的办法?

  • 问题内容: 我正在使用RMI编写密码系统的原型。 我有一个问题,因为当我启动两个客户端时,它们从OneTimePad类的服务器中的一个对象获得了响应。 因此客户端A获取为客户端b保留的密钥,由于特定的算法,这种情况不会发生。 服务器仅向客户端发送E和N变量(例如在RSA中),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将具有所有密钥)。 如何为每个客户端创建OneTimePad