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 "表示结束等.
------解决方案--------------------