Java 服务器客户端套接字编程输出困难
我是socket编程方面的新手……我需要创建一个服务器,将客户机的名称和id存储在队列中,然后将客户机提供的所有输入存储在另一个队列中。当客户机写入“测试”时,服务器检索所有存储的数据,因为客户机键入一些值,即整数…当客户机键入“恢复”时,服务器再次开始在队列中存储客户机的给定输入…如果客户机键入“退出”,服务器将发回客户机的名称和id,并开始等待ne客户机。然后接收这些信息并关闭套接字 面临的问题: 我在从队列中检索数据时遇到了问题。当我键入exit时,我可以看到正在for循环中检索的名称和id。如果我将这一行输出到client.writeBytes(“谢谢!”+“\n”);在for循环之后,它会显示客户机的名称和id,但客户机不会关闭 在if-else条件下,再次检查“test”时,我在检索数据时遇到了问题。服务器要求整数。客户端键入一个整数,然后我无法从服务器获取数据 这是我的代码 服务器端:Java 服务器客户端套接字编程输出困难,java,Java,我是socket编程方面的新手……我需要创建一个服务器,将客户机的名称和id存储在队列中,然后将客户机提供的所有输入存储在另一个队列中。当客户机写入“测试”时,服务器检索所有存储的数据,因为客户机键入一些值,即整数…当客户机键入“恢复”时,服务器再次开始在队列中存储客户机的给定输入…如果客户机键入“退出”,服务器将发回客户机的名称和id,并开始等待ne客户机。然后接收这些信息并关闭套接字 面临的问题: 我在从队列中检索数据时遇到了问题。当我键入exit时,我可以看到正在for循环中检索的名称和i
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。您能更新代码以反映这一点吗?