问题描述: 这里有一个服务器和一个带图形界面客户端。当的用户账号密码正确时,客户端会向服务器提出连接请求,也就是new Sicket(..., ...);
可是为什么客户端这个Socket会在成功连接7秒左右自动关闭。
我判断客户端的Socket已经关闭的原因有两个。
1.客户端的socket不停调用s.sendUrgentData方法,但在运行7秒左右时会抛出异常。
2 服务器一直在等待客户端的消息,但是在运行7秒左右服务器却抛出connection reset异常,在抛异常之前客户端可以正常发送数据,异常之后不能再发送了,在百度上知道这是因为发送方(也就是客户端)的socket已经关闭,而接收方还在等待接受而抛出的异常。
相关代码: // 客户端代码
public class LoginFrame extends JFrame {
private Socket s ;
if (log()) { // log是连接数据库的函数,会返回boolean表示用户名密码对不对
s = Client.requst(nameTF.getText()); // 为s赋值,将返回的Socket保存在s中, 类的静态方法requst
} else {
System.out.println("登陆失败");
}
}
// 主函数
public static void main(String[] args) throws InterruptedException {
LoginFrame f = new LoginFrame();
Thread.sleep(2000);// 为了给输入用户名和密码时间
while (true) {
try {
f.s.sendUrgentData(0xFF);
System.out.println("发送成功");
} catch (IOException e) {
System.out.println("因发送心跳包出现异常" + e.getMessage());
break
}
}
}
// 客户端的连接请求代码
public class Client {
public static Socket requst(String name) {
Socket s = null;
try {
// 发出连接请求
s = new Socket("127.0.0.1", 8888);
PrintWriter writer = new PrintWriter(s.getOutputStream());
// 告诉服务器是谁刚刚连接
writer.write(name + "\n");
writer.flush();
} catch (UnknownHostException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
return s;
}
相关截图
客户端异常
服务器异常(提问时,异常变成这个,但之前都是Connection reset)
请各位朋友帮忙了。 这次是JAVA课程设计,但老师并没有讲Socket,Socket的一些细节我也不清楚。所以拜托了帮我找找Bug。
各位我实在是充不起C币。 要是问题解决了, 你支付宝二维码或者微信发过来,
我给你6块行不行。 拜托了,帮帮我吧。