首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

来一直监听,但是报错java.io.StreamCorruptedException:invalid

2011-11-11 
怎么让服务端的socket一直处于监听中啊?我的服务端做成线程,可以正常接受客户端传过来的数据!但是服务端只

怎么让服务端的socket一直处于监听中啊?
我的服务端做成线程,可以正常接受客户端传过来的数据!但是服务端只能
监听一次!我要求服务端一只处于监听中,参照网上的建议,用while(listening=true){...}来一直监听,但是报错java.io.StreamCorruptedException:invalid   Stream   header
这是什么问题?
     


[解决办法]
你搜一下ObjectInputStream,我回答过很多这样的问题了

Object流在创建的时候会产生一个头数据,来标示对象流开始.用循环可以,但不要在循环外面初始化对象流,而是在循环内部创建,也就是说每循环一次都new一下对象流

while(true){
...
ObjectInputStream ois=new ObjectInputStream(inputStream);
ois.readObject();
...
}

发送数据的地方也一样就可以了
[解决办法]
tij2里有例子的
[解决办法]
接受到一个请求就起一个线程,再继续监听
ServerSocket sc=new ServerSocket(8189);
while(true)
{
final Socket socket =sc.accept();
Thread thread=new Thread(new Runnable()
{public void run()
{

try {
OutputStream out = socket.getOutputStream();
PrintWriter pw=new PrintWriter(out,true);
pw.println( "wo kao ");
} catch (IOException ex) {
}

}
});

}
[解决办法]
把 Socket Client=socServer.accept();放到循环里
不就循环监听拉,我前面那个例子,你可以试下~~

[解决办法]
你发送的代码贴出来看看
[解决办法]
问题解决了,我看了下别人的代码
0.ObjectInputStream ois=new ObjectInputStream(fromClient.getInputStream());
这一句都分成2步来做的:
1.ObjectInputStream ois=null 定义成全局变量
2.ois=new ObjectInputStream(fromClient.getInputStream()); 在循环中创建
不知道分开做与一起做的区别在哪里?有点奇怪,感觉没什么区别啊?

--------------------------
一个号不能回复3次,只好又注了个号把结果写出来了
[解决办法]
开始的代码:
Socket Client=socServer.accept(); //这里
while(listenin){
new ChatServer(Client).start();
}
修改后的代码
while(listening){
Socket Client=socServer.accept(); //这里,先后顺序改变了
new ChatServer(Client).start();
}
现在是彻底正常了,写出来给大家参考
[解决办法]
用线程啊................
[解决办法]
import java.io.*;
import java.net.*;
public class MultiThreadServer{
public static void main(String[] args)
{
try
{
//建立通信套接字
ServerSocket serverSocket = new ServerSocket(8000);
int clientNo = 1;
while(true)
{
//监听
Socket connectToClient = serverSocket.accept();
//如果有连接,建立一个线程进行处理
HandleAClient thread = new HandleAClient(connectToClient);
thread.start();
clientNo++;
}
}catch(IOException ex)
{
System.err.println(ex);
}
}
}
//处理客户短消息进程类
class HandleAClient extends Thread{
private Socket connectToClient;
public HandleAClient(Socket socket)
{
connectToClient= socket;
}
public void run()
{
try
{
DataInputStream isFromClient = new DataInputStream(
connectToClient.getInputStrem());


DataOutputStream osToClient = new DataOutputStream(connectToClient.getOutputStream());
while(true)
{
//业务逻辑
}
}catch(IOException ex)
{
System.err.println(ex);
}
}
}

热点排行
Bad Request.