出错原因,在client启动的时候就关闭了,不知道为什么,能帮我看一下么最好帮忙总结一下socket常见的注意事项Client代码 private static final String HOST = "localhost"; private static final int PORT = 6161; private Socket socket; public Client() {
socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(HOST,PORT);
try {
socket.connect(addr);
} catch (IOException e) {
e.printStackTrace();
}
} public void handle() throws UnknownHostException, IOException {
PrintWriter out = getWriter(socket);
out.write("hello server");
} public PrintWriter getWriter(Socket socket) throws IOException {
OutputStreamWriter osr = new OutputStreamWriter(socket
.getOutputStream());
return new PrintWriter(osr, true);
} public BufferedReader getReader(Socket socket) throws IOException {
InputStreamReader is = new InputStreamReader(socket.getInputStream());
return new BufferedReader(is);
}

public static void main(String[] args) throws UnknownHostException,
IOException {
new Client().handle();
}Server代码
private static final int PORT = 6161; private ServerSocket serSocket;

private int poolSize = 3;

private Executor exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*poolSize); public Server() throws IOException {
serSocket = new ServerSocket();
bind(serSocket);
} public void server() throws IOException {
Socket socket = null;
while (true) {
try {
socket = serSocket.accept();
socket.setSoTimeout(50000);
System.out.println("New connection accepte"+ socket.getInetAddress() + ":" + socket.getPort());
//exec "i/o"
exec.execute(new ServerHandler(socket));
} catch (Exception e) {
} finally {
if(socket!=null){
socket.close();
}
}
}
} public void bind(ServerSocket serSocket) throws IOException{
serSocket.bind(new InetSocketAddress(PORT));
System.out.println("服务器启动");
}
public static void main(String[] args) throws IOException {
new Server().server();
}
ServerHandler代码public class ServerHandler implements Runnable { private Socket socket; public ServerHandler(Socket socket) {
this.socket = socket;
} public PrintWriter getWriter(Socket socket) throws IOException {
OutputStreamWriter osr = new OutputStreamWriter(socket
.getOutputStream());
return new PrintWriter(osr, true);
} public BufferedReader getReader(Socket socket) throws IOException {
InputStreamReader is = new InputStreamReader(socket.getInputStream());
return new BufferedReader(is);
} public void handle() throws IOException {
BufferedReader reader = getReader(socket);
String msg = "";
int i = 0;
while ((msg = reader.readLine()) != null) {
System.out.println("the message come from client -->" + msg);
}
++i;
PrintWriter out = getWriter(socket);
out.write("Server accepted times -->" + i);
reader.close();
out.close();
} public void run() {
try {
handle();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}在线求助

解决方案 »

  1.   

    你把client和server的端口号改成不一样的试试
    现在client和server试图bind同一个ip和端口,这样应该是不行的
      

  2.   

    纯粹的逻辑问题,在server和client都下个断点看看了。
      

  3.   


    打断点了啊,就是在服务器exec.execute()的时候处理ServerHandler 然后读数据的时候就提示 client close没找出原因  
      

  4.   

    可以参考下列的例子 
    http://blog.csdn.net/hzhxxx/archive/2009/12/09/4970196.aspx下列描述了JNSP(java  network service platform)服务的部署和功能,如有不明白之处,自己查看源代码,我无力和没有太多时间回答太多的问题.
    源代码一起提供,可以随意修改,发布,并商业化,但请保留作者的信息.为了技术的进步,请注意共享成就.目前已经发布于:http://download.csdn.net/source/1885332;http://hzhxxx.download.csdn.net/
    如果查看后有技术问题探讨和建议的,欢迎致电致信联系.系统架构设计和实现有如下特点:
    A. 采用 Accept-Connect 通讯模型,能统一管理系统中使用的所有 Socket 资源;
    B. 系统支持通信和协议分离的实现原则,支持自定义协议解析模块;通信负责数据收发,协议负责数据鉴别,两者配合实现通信和协议的和谐工作;
    C. 灵活支持业务处理功能重定义,分级支持慢业务和快业务的不同业务处理线程;
    D. 丰富灵活的配置参数,能满足高扩展性;
    E. 配合业务处理和通信模型,能异步的管理所有的交互步骤;
    F. 分布式服务设计和部署,实现动态(热拔插)的增加和较少业务服务器,减少乃至拒绝单点服务;
      

  5.   

    看错了,看成client bind到端口了,不好意思……
      

  6.   

    拜托,LZ,我只问你,你看下面这个程序为什么一启动就关闭了 public class Main { public static void main(String... args) {
    System.out.println("close");
    }


      

  7.   

    你的Client运行完了当然就关闭了
      

  8.   

    那我应该如何做呢?
    我换了一种写法
    最基本的clientint c;
        Socket s = new Socket("localhost", 5555);
        InputStream in = s.getInputStream();
        OutputStream out = s.getOutputStream();
        String str = "aaa\n";
        byte buf[] = str.getBytes();
        out.write(buf);
    //     PrintWriter out = new PrintWriter(s.getOutputStream());
    //     out.write("aaa");
        while ((c = in.read()) != -1) {
          System.out.print((char) c);
        }
        s.close();
    问题还是client  close 错误啊具体要怎样写
      

  9.   

    ServerSocket 监听。
    ClientSocket 发送   
    ServerSocket 接受。
    ClientSocket 关闭.
    ServerSocket 关闭。
      

  10.   

    问题解决了要感谢joney的提醒我在server里
     while (true) {
                try {
                    socket = serSocket.accept();
                    socket.setSoTimeout(50000);
                    System.out.println("New connection accepte"+ socket.getInetAddress() + ":" + socket.getPort());
                    //exec "i/o"
                    exec.execute(new ServerHandler(socket));
                } catch (Exception e) {
                } finally {
                    if(socket!=null){
                        socket.close();
                    }
                }
            }
    加了一段finally 然后在里面把socket给关了,,,就出现了我频繁 开启client频繁 提示client close的原因现在知道这个是在Handler处理业务的地方来关闭socket 感谢大家的帮助