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

网络边接服务器端出错

//惟一的问题是将客户端的dos窗口关闭(右上角的叉号),而不是通过程序中指定的关闭方式时,服务器端抛出异常. 
不知哪位高手能给出解决办法 

//此程序与TCPClient.java配合使用,实现客户端与服务端会话(一人一句,不可错乱) 
//bug: 当客户端异常关闭(直接关闭窗口)时,服务端抛出异常 
import java.net.*; 
import java.io.*; 
public class TCPServer{ 
public static void main(String [] args) throws Exception{ 
  ServerSocket ss = new ServerSocket(6669); 
  Socket s =null; 
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
  DataInputStream dis=null; 
  DataOutputStream dos=null; 
  String attention ="你有话就说!!!....\n 注意: 若不愿说,那就输入\"exit\",一拍两散"; 
while(true){ 
s = ss.accept(); 

  System.out.println( "server: connect client.... ");  
  System.out.println("I said: "+attention); 
  //向客户端写入数据,提示客户端联上了就别傻愣着,找点话说 
  dos = new DataOutputStream(s.getOutputStream()); 
  dos.writeUTF(attention); 
  
  //获得客户端的输入流 
  dis = new DataInputStream(s.getInputStream()); 
  String tempStr=null; 
  String temp2=null; 
  //判断如果客户端输入exit则退出循环,断开连接 
  while(!(tempStr=dis.readUTF()).trim().equalsIgnoreCase("exit")){ 
   

  //从客户端读取数据并写到自已一端的屏上 
  System.out.println( "client: "+ tempStr); 
  
  //向客户端写入 
  temp2=br.readLine(); 
  dos.writeUTF( temp2); 
  System.out.println("I said: "+temp2); 
  dos.flush(); 
   
   
   
  } 
  if(dis!=null) 
  dis.close(); 
  if(dos!=null) 
  dos.close(); 
  dis=null; 
  dos=null; 
  if(s!=null) 
  s.close(); 
  } 
   

   








//此程序与TCPServer.java配合使用,实现客户端与服务端会话(一人一句,不可错乱) 
import java.net.*; 
import java.io.*; 
public class TCPClient { 
public static void main(String [] args) throws Exception{ 
Socket s = new Socket("127.0.0.1",6669);//服务器端的端口, 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
OutputStream os =s.getOutputStream (); 
DataOutputStream dos = new DataOutputStream(os); 
DataInputStream dis= dis = new DataInputStream(s.getInputStream()); 
String tempStr=null; 


//从服务器端读入一行数据,并在己方屏幕上显示 
  System.out.println("server: "+dis.readUTF()); 

  while(!(tempStr=br.readLine()) .equals("exit")){//当客户端(此端)输入exit时跃出循环 
//向服务端写入数据,此数据从屏幕读取 
dos.writeUTF(tempStr); 
System.out.println("I said :"+tempStr); 
dos.flush(); 
//将服务器端的数据写到己方屏幕上 
System.out.println("server: "+dis.readUTF()); 
  } 
  //如果客户端(此端)输入了exit则向server端输出exit 
  dos.writeUTF("exit"); 
  if(dis!=null) 
  dis.close(); 
  if(dos!=null) 
  dos.close(); 
  dis=null; 
  dos=null; 
  if(s!=null) 
  s.close(); 




}

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