黑马程序员:网络编程

本文深入探讨了Java网络编程的基础,重点讲解了TCP和UDP协议的区别,以及如何利用Socket实现客户端和服务端的交互。通过实例代码展示了C/S结构下Socket通讯的基本流程。

---------------------- android培训java培训、期待与您交流! ---------------------

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

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

        TCPTranfer 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中提供了两个类SocketServerSocket,分别用来表示双向连接的客户端和服务端

下面我们给出一个用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培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值