我是套接字编程新手…我必须创建一个服务器来存储名称&从一个队列中的客户端获取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更适合二进制协议。