黑马程序员——第六篇_网络编程

来源:互联网 发布:nba2k16流川枫捏脸数据 编辑:程序博客网 时间:2024/05/03 06:30

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


网络协议

TCP协议和UDP协议是比较常用的网络协议,两者同为网络协议,是一种数据交换的规则和标准

TCP协议:TCP是一种面向连接(连接导向)的、可靠的、基于字节流的基于传输层的通信协议,是一个较安全的通信协议。在建立通信时,需要在客户端和服务端建立安全套接字(socket),建立连接后双方可以双向数据传输,双方都可作为发送发和接收方。

UDP协议:UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址和目的地址。能在网上以任何的路径发往目的地,所以能否发送至目的地,以及内容的正确性都是不能保证的。

URL(统一资源定位器):它表示在internet上某一资源的地址,通过URL我们可以访问该网络资源。URL的组成是有格式的:protocol://resourceName。例如:http://www.baidu.com

socket 通信

使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。

对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
  (1) 创建Socket;
  (2) 打开连接到Socket的输入/出流;
  (3) 按照一定的协议对Socket进行读/写操作;
  (4) 关闭Socket

创建socket


其中address 和 port 分别是创建套接字的ip地址以及端口号

下面我们来看看一个简单的socket程序

客户端程序:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.io.*;  
  2.   import java.net.*;  
  3.   public class TalkClient {  
  4.     public static void main(String args[]) {  
  5.       try{  
  6.         Socket socket=new Socket("127.0.0.1",4700);   
  7.         //向本机的4700端口发出客户请求  
  8.         BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));  
  9.         //由系统标准输入设备构造BufferedReader对象  
  10.         PrintWriter os=new PrintWriter(socket.getOutputStream());  
  11.         //由Socket对象得到输出流,并构造PrintWriter对象  
  12.         BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  13.         //由Socket对象得到输入流,并构造相应的BufferedReader对象  
  14.         String readline;  
  15.         readline=sin.readLine(); //从系统标准输入读入一字符串  
  16.         while(!readline.equals("bye")){   
  17.         //若从标准输入读入的字符串为 "bye"则停止循环  
  18.           os.println(readline);   
  19.           //将从系统标准输入读入的字符串输出到Server  
  20.           os.flush();   
  21.           //刷新输出流,使Server马上收到该字符串  
  22.           System.out.println("Client:"+readline);   
  23.           //在系统标准输出上打印读入的字符串  
  24.           System.out.println("Server:"+is.readLine());   
  25.           //从Server读入一字符串,并打印到标准输出上  
  26.           readline=sin.readLine(); //从系统标准输入读入一字符串  
  27.         } //继续循环  
  28.         os.close(); //关闭Socket输出流  
  29.         is.close(); //关闭Socket输入流  
  30.         socket.close(); //关闭Socket  
  31.       }catch(Exception e) {  
  32.         System.out.println("Error"+e); //出错,则打印出错信息  
  33.       }  
  34.   }  
  35. }  


服务端程序:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.io.*;  
  2.   import java.net.*;  
  3.   import java.applet.Applet;  
  4.   public class TalkServer{  
  5.     public static void main(String args[]) {  
  6.       try{  
  7.         ServerSocket server=null;  
  8.         try{   
  9.           server=new ServerSocket(4700);   
  10.         //创建一个ServerSocket在端口4700监听客户请求  
  11.         }catch(Exception e) {  
  12.           System.out.println("can not listen to:"+e);   
  13.         //出错,打印出错信息  
  14.         }  
  15.   
  16.         Socket socket=null;  
  17.         try{  
  18.           socket=server.accept();   
  19.           //使用accept()阻塞等待客户请求,有客户  
  20.           //请求到来则产生一个Socket对象,并继续执行  
  21.         }catch(Exception e) {  
  22.           System.out.println("Error."+e);   
  23.           //出错,打印出错信息  
  24.         }  
  25.         String line;  
  26.         BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  27.          //由Socket对象得到输入流,并构造相应的BufferedReader对象  
  28.         PrintWriter os=newPrintWriter(socket.getOutputStream());  
  29.          //由Socket对象得到输出流,并构造PrintWriter对象  
  30.         BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));  
  31.          //由系统标准输入设备构造BufferedReader对象  
  32.   
  33.         System.out.println("Client:"+is.readLine());   
  34.         //在标准输出上打印从客户端读入的字符串  
  35.         line=sin.readLine();   
  36.         //从标准输入读入一字符串  
  37.         while(!line.equals("bye")){   
  38.         //如果该字符串为 "bye",则停止循环  
  39.           os.println(line);   
  40.           //向客户端输出该字符串  
  41.           os.flush();   
  42.           //刷新输出流,使Client马上收到该字符串  
  43.           System.out.println("Server:"+line);   
  44.           //在系统标准输出上打印读入的字符串  
  45.           System.out.println("Client:"+is.readLine());  
  46.           //从Client读入一字符串,并打印到标准输出上  
  47.           line=sin.readLine();   
  48.           //从系统标准输入读入一字符串  
  49.         }  //继续循环  
  50.         os.close(); //关闭Socket输出流  
  51.         is.close(); //关闭Socket输入流  
  52.         socket.close(); //关闭Socket  
  53.         server.close(); //关闭ServerSocket  
  54.       }catch(Exception e){  
  55.         System.out.println("Error:"+e);   
  56.         //出错,打印出错信息  
  57.       }  
  58.     }  
  59.   }  

0 0