socket is closed socket 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 at java.net.Socket.getInputStream(Unknown Source) at Server.model.qqServerThread.run(qqServerThread.java:19)java.net.SocketException: Socket is closedObjectInputStream ois=new ObjectInputStream(s.getInputStream());说这个已关闭 这个问题很明显呀~~你在服务端来实例化一个服务端线程实例,而且把s(socket)的引用也传给了线程实例,这个线程一启动,就一直在while(true)中运行着,可以是的服务端的,实例化线程实例,你看你做了什么,穿了消息,然后就关掉了s.close()。而线程实例端孩子while(true)里面sb一样的执行,当他发现socket突然发现已经close了,他肯定造反了。所以报错了。 服务器端package Server.model;import i.qq.common.Message;import i.qq.common.User;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.security.interfaces.RSAKey;import java.sql.ResultSet;import java.sql.SQLException;import qq.server.DB.qqServerSqlHelp;public class Serverqq {qqServerSqlHelp qqss=null;public Serverqq() {System.out.print("服务器在9999端口监听");try {ServerSocket ss = new ServerSocket(9999);while (true) {Socket s = ss.accept();ObjectInputStream ois = new ObjectInputStream(s.getInputStream());User u = (User) ois.readObject();Message ms = new Message();String sql = "select 用户名 from Denlu where 用户名=? and 密码=?";String pasa[] = { u.getUs(), u.getPw() }; qqss = new qqServerSqlHelp();ResultSet rs = qqss.Query(sql, pasa);ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());if (rs.next()) {rs.getString(1);ms.setMessType("1");oos.writeObject(ms);//一对一单开一个线程qqServerThread qqst=new qqServerThread(s);qqst.start();}else {ms.setMessType("2");oos.writeObject(ms);s.close();}}} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally{qqss.close();}}}package Server.model;import i.qq.common.Message;import java.io.IOException;import java.io.ObjectInputStream;import java.net.Socket;public class qqServerThread extends Thread{Socket s;public qqServerThread(Socket s) {this.s=s;// TODO 自动生成的构造函数存根}public void run(){while(true){try {ObjectInputStream ois=new ObjectInputStream(s.getInputStream());//这句异常Message ms=(Message)ois.readObject();System.out.print(ms.getId()+"对"+ms.getSender()+"说:"+ms.getInformation());} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}}客户端package i.qq.model;import i.qq.common.Message;import i.qq.common.User;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Writer;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.JOptionPane;public class ConServer {public boolean clientCon(Object o){boolean b=false;//连接服务器try {ConServerSocket css=new ConServerSocket();Socket s=css.ConSocket();ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());oos.writeObject(o);ObjectInputStream ois=new ObjectInputStream(s.getInputStream());Message ms=(Message)ois.readObject();if(ms.getMessType().equals("1")){b=true;}else if(ms.getMessType().equals("2")){b=false;s.close();}} catch (UnknownHostException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (ClassNotFoundException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}return b;}}at Server.model.qqServerThread.run(qqServerThread.java:19)java.io.EOFException 如果对应的socket流关闭,对应的socket也会关闭。 谁有Java的编程题目的,理论看多了,想通过实践见识下题目!! 字符串分割问题 在由面板触发的对话框里怎么实现对面板的重绘? 关于读取字符串 如何下载水晶报表的开发包Java SDK? 初学者关于Vector的问题,分不多,但请各位大侠帮帮忙 请问如何使用FileFilter处理一个文件过滤组 如何自动填写网页? 在jBuilder中怎样开发RMI java学习中碰到的 疑难杂症!!!! 在javase中的socket编程中,碰到的问题,在内容中具体描述 一个 两难的问题
at Server.model.qqServerThread.run(qqServerThread.java:19)
java.net.SocketException: Socket is closedObjectInputStream ois=new ObjectInputStream(s.getInputStream());说这个已关闭
package Server.model;import i.qq.common.Message;
import i.qq.common.User;import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.interfaces.RSAKey;
import java.sql.ResultSet;
import java.sql.SQLException;import qq.server.DB.qqServerSqlHelp;public class Serverqq {
qqServerSqlHelp qqss=null;
public Serverqq() {
System.out.print("服务器在9999端口监听");
try {
ServerSocket ss = new ServerSocket(9999);
while (true) {
Socket s = ss.accept();
ObjectInputStream ois = new ObjectInputStream(
s.getInputStream());
User u = (User) ois.readObject();
Message ms = new Message();
String sql = "select 用户名 from Denlu where 用户名=? and 密码=?";
String pasa[] = { u.getUs(), u.getPw() };
qqss = new qqServerSqlHelp();
ResultSet rs = qqss.Query(sql, pasa);
ObjectOutputStream oos = new ObjectOutputStream(
s.getOutputStream());
if (rs.next()) {
rs.getString(1);
ms.setMessType("1");
oos.writeObject(ms);
//一对一单开一个线程
qqServerThread qqst=new qqServerThread(s);
qqst.start();
}else {
ms.setMessType("2");
oos.writeObject(ms);
s.close();
}
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
qqss.close();
}
}
}
package Server.model;import i.qq.common.Message;import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;public class qqServerThread extends Thread{
Socket s;
public qqServerThread(Socket s) {
this.s=s;// TODO 自动生成的构造函数存根
}
public void run(){
while(true){
try {
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());//这句异常
Message ms=(Message)ois.readObject();
System.out.print(ms.getId()+"对"+ms.getSender()+"说:"+ms.getInformation());
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
客户端
package i.qq.model;import i.qq.common.Message;
import i.qq.common.User;import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JOptionPane;public class ConServer {
public boolean clientCon(Object o){
boolean b=false;
//连接服务器
try {
ConServerSocket css=new ConServerSocket();
Socket s=css.ConSocket();
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
oos.writeObject(o);
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Message ms=(Message)ois.readObject();
if(ms.getMessType().equals("1")){
b=true;
}else if(ms.getMessType().equals("2")){
b=false;
s.close();
}
} catch (UnknownHostException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
return b;
}
}
at Server.model.qqServerThread.run(qqServerThread.java:19)
java.io.EOFException