[黑马程序员]第十篇:网络编程

来源:互联网 发布:淘宝店铺全屏代码设置 编辑:程序博客网 时间:2024/05/01 17:58

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


网络协议

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程序

客户端程序:

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培训、期待与您交流! --------------------------------------




0 0
原创粉丝点击