Java 服务器客户端套接字编程输出困难

Java 服务器客户端套接字编程输出困难,java,Java,我是socket编程方面的新手……我需要创建一个服务器,将客户机的名称和id存储在队列中,然后将客户机提供的所有输入存储在另一个队列中。当客户机写入“测试”时,服务器检索所有存储的数据,因为客户机键入一些值,即整数…当客户机键入“恢复”时,服务器再次开始在队列中存储客户机的给定输入…如果客户机键入“退出”,服务器将发回客户机的名称和id,并开始等待ne客户机。然后接收这些信息并关闭套接字 面临的问题: 我在从队列中检索数据时遇到了问题。当我键入exit时,我可以看到正在for循环中检索的名称和i

我是socket编程方面的新手……我需要创建一个服务器,将客户机的名称和id存储在队列中,然后将客户机提供的所有输入存储在另一个队列中。当客户机写入“测试”时,服务器检索所有存储的数据,因为客户机键入一些值,即整数…当客户机键入“恢复”时,服务器再次开始在队列中存储客户机的给定输入…如果客户机键入“退出”,服务器将发回客户机的名称和id,并开始等待ne客户机。然后接收这些信息并关闭套接字

面临的问题: 我在从队列中检索数据时遇到了问题。当我键入exit时,我可以看到正在for循环中检索的名称和id。如果我将这一行输出到client.writeBytes(“谢谢!”+“\n”);在for循环之后,它会显示客户机的名称和id,但客户机不会关闭

在if-else条件下,再次检查“test”时,我在检索数据时遇到了问题。服务器要求整数。客户端键入一个整数,然后我无法从服务器获取数据

这是我的代码

服务器端:

import java.io.*;
import java.net.*;
import java.util.*;

class server
{
  public static void main(String argv[]) throws Exception
{
 String clientSentence;
 String replySentence;
 ServerSocket welcomeSocket= new ServerSocket(6789);

while(true)
{
System.out.println("#########Server Waiting#########");
Socket connectionSocket = welcomeSocket.accept();

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));          
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());

Queue<String> qe = new LinkedList<String>();

outToClient.writeBytes("Enter your Name and ID Please..."+'\n');
for(int i=0;i<=1;i++)
{
 clientSentence = inFromClient.readLine();
 qe.add(clientSentence); 
}

outToClient.writeBytes("Thank you! You may now proceed further..."+'\n'); 

Queue<String> chatq = new LinkedList<String>();
clientSentence = inFromClient.readLine();

while(!clientSentence.equals("exit"))
{

  if(clientSentence.equals("test"))
  {
    outToClient.writeBytes("Enter Integers to fetch data or 'resume' to continue..."+'\n');
    clientSentence = inFromClient.readLine();

    while(!clientSentence.equals("resume"))
    {
        replySentence = chatq.remove();
        outToClient.writeBytes(replySentence+'\n');
        clientSentence = inFromClient.readLine();
    }

    if(clientSentence.equals("resume"))
    {
      outToClient.writeBytes("You may now proceed again..."+'\n');
      clientSentence = inFromClient.readLine();

    } 
  }

  else
  {
    chatq.add(clientSentence);
    clientSentence = inFromClient.readLine();
  }        

}

if(clientSentence.equals("exit"))
{
  outToClient.writeBytes("Client Name & ID: "+'\n');

 for(int i=0;i<=1;i++)
  {
    replySentence = qe.remove();
    outToClient.writeBytes(replySentence+'\n');
  } 


}  
} 
}
}
import java.io.*;
import java.net.*;
import java.util.*;

class client
{
   public static void main(String argv[]) throws Exception
   {
   String sentence;
   String modifiedSentence;

   BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

   InetAddress inetAddress=InetAddress.getLocalHost();
   System.out.println(inetAddress);

   Socket clientSocket = new Socket(inetAddress,6789);
   while(true)
   {

      DataOutputStream outToServer =  new DataOutputStream(clientSocket.getOutputStream());       

      BufferedReader inFromServer = new  BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

      modifiedSentence=inFromServer.readLine();
      System.out.println("From Server: "+modifiedSentence+'\n');

      for(int i=0;i<=1;i++)
      {
       sentence = inFromUser.readLine();
        outToServer.writeBytes(sentence+'\n');   
      }
       modifiedSentence=inFromServer.readLine();
       System.out.println("From Server: "+modifiedSentence + '\n');



        sentence = inFromUser.readLine();
         while(!sentence.equals("exit"))
         {

if(sentence.equals("test"))
{
  outToServer.writeBytes(sentence+'\n');
  modifiedSentence=inFromServer.readLine();
  System.out.println("From Server: "+modifiedSentence + '\n');
  sentence = inFromUser.readLine();

  while(!sentence.equals("resume"))
  {
    outToServer.writeBytes(sentence+'\n');
    modifiedSentence=inFromServer.readLine();
    System.out.println("From Server: "+modifiedSentence + '\n');
    sentence = inFromUser.readLine();
  }

  if(sentence.equals("resume"))
  {
    outToServer.writeBytes(sentence+'\n');
    modifiedSentence=inFromServer.readLine();
    System.out.println("From Server: "+modifiedSentence + '\n');
    sentence = inFromUser.readLine();

  }

}

else
{
  outToServer.writeBytes(sentence+'\n');
  sentence = inFromUser.readLine();
 }
}

  if(sentence.equals("exit"))
  {
  outToServer.writeBytes(sentence+'\n');
  modifiedSentence=inFromServer.readLine();
  System.out.println("From Server: "+modifiedSentence + '\n');
  for(int i=0;i<=1;i++)
  {
    modifiedSentence=inFromServer.readLine();
    System.out.println(modifiedSentence + '\n');
  } 

  clientSocket.close(); 
  break;
}

}

}
}
import java.io.*;
导入java.net。*;
导入java.util.*;
类服务器
{
公共静态void main(字符串argv[])引发异常
{
字符串介词句;
字符串应答;
ServerSocket welcomeSocket=新的ServerSocket(6789);
while(true)
{
System.out.println(“服务器等待”);
套接字连接Socket=welcomeSocket.accept();
BufferedReader inFromClient=新的BufferedReader(新的InputStreamReader(connectionSocket.getInputStream());
DataOutputStream outToClient=新的DataOutputStream(connectionSocket.getOutputStream());
队列qe=新的LinkedList();
outToClient.writeBytes(“请输入您的姓名和ID…”+“\n”);

对于(inti=0;i我假设这是
[家庭作业]
,但是

您正在将二进制(DataOutputStream)与文本(BufferedReader)混合使用。您应该使用其中一种,否则您肯定会感到困惑


看来你想发送文本,所以我会使用BufferedReader和PrintWriter。DataOutputStream更适合二进制协议。

是的……这是我的家庭作业……我不擅长java,所以有困难……我会尝试使用PrintWriter,让你知道……我只是用PrintWriter替换了DataOutputStream,如下所示:PrintWriter outToClient=null;outToClient=new PrintWriter(connectionSocket.getOutputStream(),true);以及数据打印位置,如:outToClient.println(“谢谢!您现在可以继续…”+“\n”);现在我有点困惑,因为输出没有像以前那样出现…你能解释一下吗?或者可以参考任何有用的链接吗?我正在检查一些,但是如果你能帮助我,我仍然会很感激。你能用英语而不是说文本吗?你能用你现在所拥有的更新问题中的代码吗?对不起,关于文本演讲。我现在已经更新了代码。我正在写入outToClient.writeBytes(ReplyStence);而不是outToClient.writeBytes(ReplyStence+'\n');我做了此更改,并且它正在工作。现在,我必须确保客户端只能在键入“test”后给出整数。我告诉过您不要使用DataOutputStream,而是使用PrintWriter。您能更新代码以反映这一点吗?