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


----------------------------------- 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值