您的位置:首页 > 理论基础 > 计算机网络

黑马程序员:网络编程

2011-11-10 16:17 357 查看
---------------------- android培训java培训、期待与您交流! ---------------------

之前上课听老师讲过网络的相关知识,了解到有两个协议:TCP和UDP,可是对于java如何实现网络编程却不是很了解。通过学习了毕老师的网络编程视频,现在做如下总结吧.

一:先说一下什么是TCP和UDP:

        TCP是Tranfer
Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server
socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

  UDP是User
Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
二:URL的某些属性。
     public String getProtocol() 获取该URL的协议名。

   public String getHost() 获取该URL的主机名。

   public int getPort() 获取该URL的端口号,如果没有设置端口,返回-1。

   public String getFile() 获取该URL的文件名。

   public String getQuery() 获取该URL的查询信息。

   public String getPath() 获取该URL的路径
   public String
getUserInfo() 获得使用者的信息.
三:Socket通讯。
   对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
  (1) 创建Socket;
  (2) 打开连接到Socket的输入/出流;
  (3) 按照一定的协议对Socket进行读/写操作;
  (4) 关闭Socket.

 
 java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。

下面我们给出一个用Socket实现的客户和服务器交互的典型的C/S结构的程序:

客户端:

    import java.io.*;

  import java.net.*;

  public class TalkClient {

    public static void main(String args[]) {

      try{

        Socket socket=new Socket("127.0.0.1",4700); 

        //向本机的4700端口发出客户请求
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

        //由系统输入设备构造BufferedReader对象
        PrintWriter os=new PrintWriter(socket.getOutputStream());

        //由Socket对象得到输出流,并构造PrintWriter对象
        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //由Socket对象得到输入流,并构造相应的BufferedReader对象
        String readline;

        readline=sin.readLine(); //从系统标准输入读入一字符串
        while(!readline.equals("bye")){ 

        //若从标准输入读入的字符串为 "bye"则停止循环
          os.println(readline); 

          //将从系统标准输入读入的字符串输出到Server
          os.flush(); 

          //刷新输出流,使Server马上收到该字符串
          System.out.println("Client:"+readline); 
          //在系统标准输出上打印读入的字符串
          System.out.println("Server:"+is.readLine()); 

          //从Server读入一字符串,并打印到标准输出上
          readline=sin.readLine(); //从系统标准输入读入一字符串
        } //继续循环
        os.close(); //关闭Socket输出流
        is.close(); //关闭Socket输入流
        socket.close(); //关闭Socket
      }catch(Exception e) {

        System.out.println("Error"+e); //出错,则打印出错信息
      }

  }

}

服务器端程序:
  import java.io.*;

  import java.net.*;

  import java.applet.Applet;

  public class TalkServer{

    public static void main(String args[]) {

      try{

        ServerSocket server=null;

        try{ 

          server=new ServerSocket(4700); 

        //创建一个ServerSocket在端口4700监听客户请求
        }catch(Exception e) {

          System.out.println("can not listen to:"+e); 

        //出错,打印出错信息
        }

        Socket socket=null;

        try{

          socket=server.accept(); 

          //使用accept()阻塞等待客户请求,有客户

          //请求到来则产生一个Socket对象,并继续执行
        }catch(Exception e) {

          System.out.println("Error."+e); 

          //出错,打印出错信息
        }

        String line;

        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

         //由Socket对象得到输入流,并构造相应的BufferedReader对象
        PrintWriter os=newPrintWriter(socket.getOutputStream());

         //由Socket对象得到输出流,并构造PrintWriter对象
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

         //由系统标准输入设备构造BufferedReader对象
        System.out.println("Client:"+is.readLine()); 
        //在标准输出上打印从客户端读入的字符串
        line=sin.readLine(); 
        //从标准输入读入一字符串
        while(!line.equals("bye")){ 
        //如果该字符串为 "bye",则停止循环
          os.println(line); 
          //向客户端输出该字符串
          os.flush(); 
          //刷新输出流,使Client马上收到该字符串
          System.out.println("Server:"+line); 
          //在系统标准输出上打印读入的字符串
          System.out.println("Client:"+is.readLine());
          //从Client读入一字符串,并打印到标准输出上
          line=sin.readLine(); 
          //从系统标准输入读入一字符串
        }  //继续循环
        os.close(); //关闭Socket输出流
        is.close(); //关闭Socket输入流
        socket.close(); //关闭Socket
        server.close(); //关闭ServerSocket
      }catch(Exception e){
        System.out.println("Error:"+e); 
        //出错,打印出错信息
      }
    }
  }

-------------------- android培训java培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息