社区
Java SE
帖子详情
InputStream的问题
xujianxiang
2007-10-19 01:44:37
我的服务器端建了这样一个流inputStream = client.getInputStream();
用来接收客户端的数据,刚开始一切正常,可是用了半天左右吧,这个流就收不到数据了,客户端一切正常(重户服务器,客户端自动连接,一切正常),而没有重启服务器,线程结束了,新建一个线程还是收不到数据.
...全文
597
7
打赏
收藏
InputStream的问题
我的服务器端建了这样一个流inputStream = client.getInputStream(); 用来接收客户端的数据,刚开始一切正常,可是用了半天左右吧,这个流就收不到数据了,客户端一切正常(重户服务器,客户端自动连接,一切正常),而没有重启服务器,线程结束了,新建一个线程还是收不到数据.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xujianxiang
2007-10-19
打赏
举报
回复
大体上是这样;
public HSserver() throws IOException {
super(SERVER_PORT);
// TODO 自动生成构造函数存根
try {
while (true) {
Socket socket;
try {
socket = accept();
new CreateServerThread(socket);
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
} finally {
try {
close();
timer.cancel();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
这一部会建建立客户端连接;下面是对客户端数据的处理,重要信息,我"////"标注
public CreateServerThread(Socket s) throws IOException {
sbuf[0] = 0x7e;
sbuf[2] = 0x00;
sbuf[3] = 0x10;
sbuf[4] = 0x01;
sbuf[5] = 0x00;
sbuf[7] = 0x0d;
sbuf[8] = 0x08;
sbuf[9] = 0x09;
sbuf[10] = 0x0a;
sbuf[11] = 0x0b;
sbuf[12] = 0x0c;
sbuf[13] = 0x0d;
sbuf[14] = 0x0e;// 发送门卫机信息
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
outputStream =new BufferedOutputStream( client.getOutputStream());
inputStream = new BufferedInputStream(client.getInputStream());
//inputStream.reset();
start();
}
public void run() {
try {
client.setSoTimeout(5000);
line = in.readLine();////问题在于每一次客户端连接的时候这个line 还是能传上来的.
String name = getFString(line, "@");
String password = getLString(line, "@");
DB db = new DB();
ResultSet rs, rs1;
String strsql = "select * from fwusers where name='" + name
+ "'and password='" + password + "'";
rs = db.executeQuery(strsql);
if (rs.next() && checkuser(name)) {
synchronized (obj) {
Username=name;
User_List.add(Username);
}
school_num = rs.getString("school_num");
strsql = "select * from addset" + school_num;
rs1 = db.executeQuery(strsql);
if (rs1.next()) {
sbuf[1] = (byte)rs1.getInt("guard");
if (sbuf[1] < 1)
sbuf[1] = 1;
} else
sbuf[1] = 1;
sbuf[6]=checkguard(sbuf);
outputStream.write(sbuf,0,15);
outputStream.flush();////这里是查询数据库是否有这样一个用户和确定该用户只有一个客户端线程与我服务器连接,发送一些信息给客户端.些中没多少价值.
while(true){
client.setSoTimeout(180000);
inputStream.read(rbuf,0,15);////这里出错了,运行久了就收不信息了.会不会是设定时间太长了它把接收子进程的等级给调低了?客户进程我只弄了15000毫秒,运行多了就收不到了,害得我够惨.
//inputStream.skip(15);////这一句有没有一个样
if (check(rbuf)) {
CardInfo ci=new CardInfo(rbuf,school_num,db,outputStream);
ci.sendinfo();
}
else if((rbuf[0]==0x7e)&&(rbuf[1]==1)&&(rbuf[2]==2)&&(rbuf[8]==8)&&(rbuf[14]==14))
{ EnableOrDisableCard edc=new EnableOrDisableCard(school_num,db, outputStream, client, inputStream);
edc.sendCard();
}
else
{outputStream.write("recrecrecrecrec".getBytes(),0,15);
outputStream.flush();
break;
}
}
}
}catch (IOException e) {
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
synchronized (obj) {
User_List.remove(Username);
}
outputStream.close();
inputStream.close();
in.close();
out.close();
client.close();
} catch (IOException e) {
}
}
}
Lisliefor
2007-10-19
打赏
举报
回复
“ 楼上的方法是用脚趾头想出来的吗??”
受宠若惊!看来我脚趾头跟某些人的脑袋有得一拼!!
hexizheng
2007-10-19
打赏
举报
回复
发片代码撒, 楼上的方法是用脚趾头想出来的吗??
Lisliefor
2007-10-19
打赏
举报
回复
服务器的socket调用的accept()方法需要放在一个循环中:
boolean flag = true;
while(flag) {
s.accept();
//...流读取
}
当不需要接受数据时,将flag设为flase。如此便保证服务器一直监听那个端口,并接受数据。否则,当接收到一次数据后,便停止,如果你做了清理工作,那么流将会被关闭。
jinweifu
2007-10-19
打赏
举报
回复
是不是应该把流使用后close()呢
xujianxiang
2007-10-19
打赏
举报
回复
再顶一下
xujianxiang
2007-10-19
打赏
举报
回复
自己顶一下
解决 Error: java.io.EOFException: Premature EOF from
inputStream
问题
解决 Error: java.io.EOFException: Premature EOF from
inputStream
问题
一、
问题
1.
问题
过程 在日志解析任务过程中,突发报错,任务一直都很稳定,怎么回突然报错了呢?心头一紧 2.详细错误类型: 查看日志发现...
Android的
InputStream
问题
最近发现,解析服务器返回的数据并把...比如本来要根据这个输入流解析成String, 开始的做法是先用一个方法把服务器返回的数据解析成一个
InputStream
(在一个方法里完成),并返回 其他方法调用这个
InputStream
继续解析操作
Socket 中的
InputStream
Java为我们提供了
InputStream
和OutputStream的IO库,从数据流
InputStream
中读取数据时,有三种读取的方法,方法二、三本质是一样的。三种方法都返回int型,同时能够抛出IOException异常 read() read(byte[] b) ...
android文件解析
InputStream
问题
解决
在实际的开发中我们发送请求访问服务器端,当返回的是xml格式的
InputStream
对象时,有时我们采用解析方法如sax, pull 对流进行解析时会出现上面的情况,显示解析,这时可以将流对象读取到内存中转换成字符串,在...
Java将网络图片转成输入流以及将url转成
InputStream
问题
https://pythonjishu.com/rhgkwseyqqojjxc/
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章