问题描述
我尝试向我的服务器发送消息两次,但一直出现错误。我想知道我应该怎么做才能使这件事发挥作用。我一直在这一行出现错误“msgToServer.witeBytes("GETACCESS"+jTextFieldUsername.getText()+""+jTextFieldPassword.getText()+"\n")”。
客户:
try {
s = new Socket("localhost",6000);
Socket incoming;
incoming = s;
msgFromServer = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
msgToServer = new DataOutputStream(incoming.getoutputStream());
msgToServer.writeBytes("LOGIN "+jTextFieldUsername.getText()+" "+jTextFieldPassword.getText()+"\n");
String result;
result = msgFromServer.readLine();
if(result.equals("TRUE")){
JOptionPane.showMessageDialog(null,"Client Access is granted");
}
else if(result.equals("False")){
JOptionPane.showConfirmDialog(this,"Client Access is not granted");
}
msgToServer.writeBytes("GETACCESS"+ jTextFieldUsername.getText() + " "+ jTextFieldPassword.getText() + "\n");
String h1;
h1 = msgFromServer.readLine();
JOptionPane.showConfirmDialog(this,"hl: "+h1);
if(h1.equals("Teacher")){
refreshTable(2);
JOptionPane.showConfirmDialog(this,"You were granted as a lecturer");
}
else if(h1.equals("Student")){
refreshTable(1);
JOptionPane.showConfirmDialog(this,"You were granted as a student");
}
} catch (IOException ex) {
Logger.getLogger(presensiClientFrame.class.getName()).log(Level.SEVERE,null,ex);
}
我的错误:
java.net.socketException: Connection reset
at java.net.socketInputStream.read(SocketInputStream.java:210)
at java.net.socketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
//....
解决方法
server 阻塞,直到有客户端连接到它,然后再次阻塞以侦听来自客户端的消息,在单个消息之后,它关闭连接,因为代码不处理连续性。为了保持持续的通信活跃,你需要像这样执行读、写
String inputLine;
while ((inputLine = msgFromServer.readLine()) != null) {
if (".".equals(inputLine)) {
out.println("bye");
break;
}
msgToServer.writeBytes("GETACCESS"+ jTextFieldUsername.getText() + " "+ jTextFieldPassword.getText() + "\n");
}