当前位置:首页 > Java技术 > 正文内容

Socket与ServerSocket的问题

canca19年前 (2007-04-09)Java技术502

//服务器端:
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();
  }
  
  
 }


扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/645.html

标签: Java技术
分享给朋友:

“Socket与ServerSocket的问题” 的相关文章

对象序列化与反序列化

    序列化,并不是JAVA独有的。因此,在这里我用比较通俗的话说了。序列化就是把一个对象转换成有规则的二进制流。而反序列化就是把有规则的二进制数据重整成一个对象。其好处不难看见:1.可以把一个对象保存在一个文件里。例如,下载软件。当您关闭了软件,下次再打开...

Java语言的反射机制

    由于项目的需要,在项目中要实现即插即用的方式,也就是说可以动态地加载包,不用设置CLASSPATH路径。当项目发布时,不可能要用户来设置环境变量吧!因此,就要用到JAVA的反射机制了。昨天,我是在研究JAVA的JNI技术。由于没有时间,所以过几天才写JNI。今天...

JSP与Servlet的对应关系

以前在QQzone写下的文章现在贴到这里来了... 最近比较忙啊!现在抽身写一篇文章。是关于JSP与Servlet的对应关系的。希望对大家有所帮助。其实我也是刚刚学的......-------Servlet--------------JSP----------1.ServletContext&nbs...

JAVA获得一个文件夹大小

在JAVA里没有现成的方法获取一个文件夹的大小,那么我们可以用递归的方法,获取文件夹的大小。    import  java.util.*;  import  java.io.*;  class  GetFileSi...

IM技术(1)

    做项目了,NetCL今天开工了,在这些日子里,我会将自己研究的内容写下来。做个记录,以下是我在网上搜到的。关于管理用户状态的解决方案,当然,我都有一个方案。不过对客户端的任务有点重吧,我方法是客户端从服务器端获到一个用户在线状态后,接着就与服务器无关了。好友离线...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。