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();
}

}

}

解决方案 »

  1.   

    建立连接之后,你的Server2 Thread只读了一次,就关闭了连接啊。
    在run()中要一直不停的读下去,直到该关闭连接的时候。
      

  2.   

    你server端如楼上说,只读了一次就停了, 另外是client端 ss.close()过早关闭连接,client端只发了一个"欢迎你哦!"就关闭连接了,当然没办法再发送.把ss.close放到循环外面,再把server端的thread改成无限循环,靠程序来控制结束循环,比如发个"END"表示结束等.
      

  3.   

    把你的服务端监听放到
    while(true)
    {}
    循环里