日期:2014-05-20  浏览次数:20700 次

java SOCKET通讯 问题...........
socket   是建立连接的.服务器端负责监听,所以建立连接后客户端就能给服务器端发送消息.为什么我建立了连接只能发送一次.

如果把客户端每次发送消息都重新建立socket连接,就能连续发送.
看下面的程序,就是只能发送一次.
谁能高诉我为什么,是不是我理解错了......

server端:

import   java.io.*;
import   java.net.*;


public   class   Server2   extends   Thread
{
private   Socket   ss;
public   Server2(Socket   ss)
{
this.ss=ss;
}

public   void   run()
{
try{
InputStream   in=ss.getInputStream();
    OutputStream   out=ss.getOutputStream();
    byte[]   buf=new   byte[1024];
    int   len=in.read(buf);
    if(len> 0)
        {
        System.out.println(new   String(buf,0,len));
        }
        out.write( "欢迎你哦! ".getBytes());
    in.close();
    out.close();
    ss.close();
}
catch(Exception   e)
{
System.out.println( "thread   creat   fall ");
e.printStackTrace();
}
}

public   static   void   main(String[]   srgs)
{
try
{
ServerSocket   server=new   ServerSocket(6000);
    while(true)
      {
      Socket   ss=server.accept();
      new   Server2(ss).start();

      }

          }
catch(Exception   e)
{System.out.println( "ERRo "+e);
e.printStackTrace();

}


}
}

clinet   端:


import   java.io.*;
import   java.net.*;


public   class   Client2
{

public   static   void   main(String[]   args)
{
try  
{
Socket   ss=new   Socket( "localhost ",6000);
InputStream   in=ss.getInputStream();
OutputStream   out=ss.getOutputStream();
BufferedOutputStream   bos=new   BufferedOutputStream(out);
BufferedReader   bin=new   BufferedReader(new   InputStreamReader(System.in));
String   str=new   String( " ");
for(int   i=1;i <10000;i++)
{
          str=bin.readLine();
          System.out.println( "ni   shu   ru   de   zifu   shi: "+str);
    bos.write(str.getBytes());
        bos.flush();

}
in.close();
out.close();
ss.close();
bos.close();
}
catch(Exception   e)
{
System.out.println( "ERRO "+e);
e.printStackTrace();
}

}

}

------解决方案--------------------
建立连接之后,你的Server2 Thread只读了一次,就关闭了连接啊。
在run()中要一直不停的读下去,直到该关闭连接的时候。
------解决方案--------------------
你server端如楼上说,只读了一次就停了, 另外是client端 ss.close()过早关闭连接,client端只发了一个 "欢迎你哦! "就关闭连接了,当然没办法再发送.

把ss.close放到循环外面,再把server端的thread改成无限循环,靠程序来控制结束循环,比如发个 "END "表示结束等.

------解决方案--------------------