高分请教,关于socket阻塞问题

xzm2000 2004-01-05 09:02:15
我在很多地方看到是编写接收socket流的列子,但是我按照列子中的代码书写,总是会在读完数据后阻塞,原因可能是 服务器端写完流后并不关闭socket,还要等待用户输入后在继续输出,请问这种情况我的代码该如何修改?

Socket client = new Socket(host, port);
InputStream is = client.getInputStream();
DataInputStream dis = new DataInputStream(is);
String line = "";
while((line = dis.readLine()) != null)
{
System.out.println(line);
}
...全文
81 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lapwing2002 2004-01-06
  • 打赏
  • 举报
回复
建议你使用线程池吧
xzm2000 2004-01-05
  • 打赏
  • 举报
回复
up
xzm2000 2004-01-05
  • 打赏
  • 举报
回复
up
xzm2000 2004-01-05
  • 打赏
  • 举报
回复
-->"原因可能是 服务器端写完流后并不关闭socket"
那就处理完后自己把Socket关掉嘛 !

服务器端的程序不是我写的,比如一个ftp服务器,我要下载一个文件,首先连上后验证用户,验证通过后服务器端等待我发命令,而不能关闭socket,但是客户端又因为被阻塞不能继续发命令,就耗在这了
wisure 2004-01-05
  • 打赏
  • 举报
回复
web应用不像windows应用,web是无状态的,要做线程处理很麻烦,而且我的web程序放在服务器机群中,对于发送数据的服务器来说web是客户端,对于终端用户来说web是服务端,当用户并发一上来,线程的消耗就相当客观。

不开线程就没有办法了吗?
honkyjiang 2004-01-05
  • 打赏
  • 举报
回复
"原因可能是 服务器端写完流后并不关闭socket"
那就处理完后自己把Socket关掉嘛 !
tiger_wkh52741 2004-01-05
  • 打赏
  • 举报
回复
虽然是web,但是一个好的线程控制能力所用的网络资源开销换来的相比之下的顺畅的服务端和客户端数据的畅通的代价是值得的!你说呢?
xzm2000 2004-01-05
  • 打赏
  • 举报
回复
可是我做的是web应用,启动线程可能开销太大
lapwing2002 2004-01-05
  • 打赏
  • 举报
回复
启动一个单独的线程监听Socket,在读到数据后触发一个事件或者调用回调函数
CoolAbu 2004-01-05
  • 打赏
  • 举报
回复
你下面这段代码只是和服务器建立了某种连接,你没有发送讯息给服务器,服务器所以也不会给你发送讯息。你可以改改服务器段代码,在接收到连接的时候发送一个消息到连接端。
Socket client = new Socket(host, port);
InputStream is = client.getInputStream();
DataInputStream dis = new DataInputStream(is);
String line = "";
while((line = dis.readLine()) != null)
{
System.out.println(line);
}
CharmingChen 2004-01-05
  • 打赏
  • 举报
回复
betterjonah 2004-01-05
  • 打赏
  • 举报
回复
让服务器发送一个结束命令
xinshou1979330 2004-01-05
  • 打赏
  • 举报
回复
关注
帮楼主顶一下吧
xzm2000 2004-01-05
  • 打赏
  • 举报
回复
web程序应该可以用socket的,简单的比如数据库的数据获取,web服务器上的jsp提交sql搜索语句,然后从数据库服务器上得到结果集返回,这种通讯低层肯定是用socket实现的,不然还有什么方式传送数据?
javacofe 2004-01-05
  • 打赏
  • 举报
回复
web应用不能用socket这个是肯定的。
你说的可能是cs的程序,服务器端阻塞是为了监听客户端的请求,有请求了就对客户端返回数据,得以继续工作。要是想关掉socket的话就没法工作了,socket是保持状态的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧