Socket与ServerSocket的问题

canca canca
2007-04-09 14:22
1
0

//服务器端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;


public class Server {
 
 

 /**
  * @param args
  */
 /**
  * @param args
  */
 public static void main(String[] args) {
  String str="server hello first";
  // TODO Auto-generated method stub
  try {
   ServerSocket ss=new ServerSocket(1258);
   while(true){
    Socket s=ss.accept();
    System.out.println("connected");
    
    PrintStream out=new PrintStream(s.getOutputStream());
    BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
    
//    System.out.println("send:"+str);
    out.write(str.getBytes());
    
    str=in.readLine();
    System.out.println("recieve:"+str);

     
    
    out.close();
    s.close();
    in.close();
   }
   
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;


public class Client {

 /**
  * @param args
  */
 public static void main(String[] args) {
//  String str=null;
  // TODO Auto-generated method stub
  Socket s;
  try {
   s = new Socket("127.0.0.1",1258);
   System.out.println("connected");
   
   BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
   PrintStream out=new PrintStream(s.getOutputStream());
   
   
   
   String str=in.readLine();
   System.out.println("recieve:"+str);
   
   str="client hello first";
//   System.out.println("send:"+str);
   out.write(str.getBytes());
   
   
   out.close();
   s.close();
   in.close();
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
 }

}
不知道为什么不能正常收发消息。。。两边都阻塞住了。。。为什么呢??在JAVA1.4版本能正常却在JAVA1.5版本却不能。呵呵。。本人觉得原因是两边的管子包的太多了。。。更加上。。。管子实现了过滤器。。。。如果用ObjectOutputStream跟ObjectInputStream就没有问题了。。。。

正确的:

服务器:
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class Server {
 
 

 /**
  * @param args
  */
 /**
  * @param args
  */
 public static void main(String[] args) {
  String str="server hello first";
  // TODO Auto-generated method stub
  try {
   ServerSocket ss=new ServerSocket(1258);
   while(true){
    Socket s=ss.accept();
    System.out.println("connected");
    
    ObjectOutputStream out=new ObjectOutputStream(s.getOutputStream());
    ObjectInputStream in=new ObjectInputStream(s.getInputStream());
    
//    System.out.println("send:"+str);
    out.writeUTF(str);
    
    out.flush();
    
    str=in.readUTF();
    System.out.println("recieve:"+str);

     
    
    out.close();
    s.close();
    in.close();
   }
   
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class Client {

 /**
  * @param args
  */
 public static void main(String[] args) {
//  String str=null;
  // TODO Auto-generated method stub
  Socket s;
  try {
   s = new Socket("127.0.0.1",1258);
   System.out.println("connected");
   
   ObjectInputStream in=new ObjectInputStream(s.getInputStream());
   ObjectOutputStream out=new ObjectOutputStream(s.getOutputStream());
   
   String str=in.readUTF();
   System.out.println("recieve:"+str);
   
   str="client hello first";
//   System.out.println("send:"+str);
   out.writeUTF(str);
   
   
   out.close();
   s.close();
   in.close();
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
 }


发表评论