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



我是套接字编程新手…我必须创建一个服务器来存储名称&从一个队列中的客户端获取Id,然后将客户端给出的所有输入存储在另一个队列中。当客户端写"测试",服务器检索所有存储的数据作为客户端类型的一些值,即整数…当客户端输入'resume'时,服务器再次开始将客户端给定的输入存储在队列中…如果客户端输入'exit',服务器发送回客户端的名称和id,并开始等待新的客户端。然后接收这些信息并关闭套接字。

问题面临:M在从队列中检索数据时遇到问题。当我输入exit时,我可以看到我通过for循环检索到的名称和id。如果我把这行输出到客户端。writeBytes("谢谢!"+" n");在for循环之后,它显示客户端的名字&但是客户端没有关闭。

在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;
}
}
}
}

我假设这是[homework],但是…

您正在混合二进制(DataOutputStream)与文本(BufferedReader)。你应该用其中之一,否则你一定会混淆自己。

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

最新更新