java socket 问题 急!

kingxin130 2008-01-22 01:55:58
项目中发现java socket连接无法关闭,写了两个测试程序,确实无法关闭,大虾们帮忙看看:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

public class TestSocketServer
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;

public TestSocketServer()
{
try
{
ss = new ServerSocket(60000);

while (true)
{
socket = ss.accept();
socket.setTcpNoDelay(false);
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);

while (socket != null && socket.isConnected())
{
out.println(new Date());
Thread.sleep(3000);
}

out.close();
in.close();
socket.close();
}

}
catch (Exception e)
{
e.printStackTrace();
try
{
ss.close();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

public static void main(String[] args)
{
new TestSocketServer();
}
}
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingxin130 2008-02-01
  • 打赏
  • 举报
回复
while (socket != null && socket.isConnected())

我就是想:服务器端不关闭socket,希望网络问题,或者客户端关闭socket后,能通过上面的代码检测出来
cucmeLiu 2008-01-22
  • 打赏
  • 举报
回复
你的实现方法不对下面这句话肯定永远为真了
while (socket != null && socket.isConnected())
因为你
while (socket != null && socket.isConnected())
{
out.println(new Date());
Thread.sleep(3000);
}

out.close(); 
in.close();
socket.close(); // <--这个地方地关闭socket,而在上面的while已经在判断其连接状态。

你可以参考下相关的书
我的blog上也有一个例子,不过是别人的
http://cucme.blog.163.com/blog/static/6804543200792411039843/

http://cucme.blog.163.com/blog/static/6804543200792411155106/
kingxin130 2008-01-22
  • 打赏
  • 举报
回复
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

public class TestSocketClient
{

private BufferedReader in;

public TestSocketClient()
{
try
{
Socket s = new Socket("127.0.0.1", 60000);
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = "";
int times = 5;
while ((line = in.readLine()) != null)
{
System.out.println(line);
if (times-- <= 0)
{
break;
}
}
s.close();
System.out.println(s.isClosed());
}
catch (Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
new TestSocketClient();
}
}

62,614

社区成员

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

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