Java - 网络编程(NetWork)
 
一、java.net包下的 InetAddress 类的使用:
    > 一个 InetAddress 代表着一个IP地址
    > 主要用来查看本机的IP和主机名
 
1、方法介绍:
    > InetAddress inet = InetAddress.getByName("www.baidu.com");:调用静态方法创建一个对象
    > getHostName();:返回IP地址的域名
    > getHostAddress();:返回IP地址的IP号
    > InetAddress inet = InetAddress.getLocalHost();:获取本机的IP
 
二、TCP 和 UDP
1、两者的区别:
    > TCP
        > 使用TCP协议前,须先建立连接,行程传输数据通道
        > 传输前,采用"三次握手"方式,是可靠的
        > TCP协议进行通信的两个应用进程:客户端(Client) 、服务端(Server)
        > 在连接中可进行大数据量的传输
        > 传输完毕,需释放已建立的连接,传输效率有点低
    > UDP
        > 将数据、源、目的封装成数据包,不需要建立连接
        > 每个数据报的大小限制在64K内
        > 因无需连接,故事不可靠的
        > 发送数据结束时,无需释放资源,传输效率高
 
2、TCP协议的传输
    > 客户端实现
    // 创建一个 Socket 对象,指明IP和端口号
    Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 8080);
    OutputStream os = socket.getOutputStream();
    // 发送数据给服务端
    os.write("我是客户端".getBytes());
    os.close();
    socket.close();
    > 服务端实现
    ServerSocket server = new ServerSocket(8080);
    Socket socket = server.accept();
    InputStream is = socket.getInputStream();
    byte[] b = new byte[20];
    int len;
    while ( (len = is.read(b)) != -1){
        String str = new String(b, 0, len);
    } 
    is.close();
    socket.close();
    server.close();
    
3、UDP协议的传输
    > 通过 DatagramSocket 类和 DatagramPacket 类实现了基于UDP协议的网络程序
    > UDP 数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到
       目的地,也不确定什么时候能送到
    > DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP
       地址和端口号
    > UDP协议中每个数据报都给出了完整的地址信息,因为无须建立发送方和接收方的连接
 
    > 发送端实现:send()
    DatagramSocket ds = new DatagramSocket();
    byte[] b = "要发送的内容".getBytes();
    DatagramPacket pack = new DatagramPacket(b, 0, b.length,
                                           InetAddress().getByName("127.0.0.1"), 8080);
    ds.send(pack);
 
    > 接收端实现:receive()
    DatagramSocket ds = new DatagramSocket();
    byte[] b = new byte[1024];
    DatagramPacket pack = new DatagramPacket(b, 0, b.length);
    ds.receive(pack);
    String str = new String(pack.getData(), 0, pack.length);
    System.out.println(str);

Java - 网络编程(NetWork)的更多相关文章

  1. Java 网络编程----基本概念

    网络现在是一个非常普遍的概念. 以下是维基百科上的解释: 网络一词有多种意义,可解作: 网络流也简称为网络(network).一般用于管道系统.交通系统.通讯系统建模. 有时特指计算机网络. 或特指其 ...

  2. Java 网络编程最佳实践(转载)

    http://yihongwei.com/2015/09/remoting-practice/ Java 网络编程最佳实践 Sep 10, 2015 | [Java, Network] 1. 通信层 ...

  3. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

  4. 【Android实战】----从Retrofit源代码分析到Java网络编程以及HTTP权威指南想到的

    一.简单介绍 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明确为什么Retrofit那么屌. 近期也看了一些其源代码分析的文章以及亲自查看了源代码 ...

  5. Java网络编程和NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型

    Java网络编程与NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型 知识点 nio 下 I/O 阻塞与非阻塞实现 SocketChannel 介绍 I/O 多路复用的原理 事件选择器与 ...

  6. Java网络编程和NIO详解3:IO模型与Java网络编程模型

    Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...

  7. Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制

    Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制 JAVA 中原生的 socket 通信机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.co ...

  8. [置顶] 【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的

    一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对 ...

  9. Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型

    本文转载自:https://github.com/jasonGeng88/blog 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 http ...

随机推荐

  1. BASE64Encoder问题类

    于myeclipse于BASE64Encoder提示类不出现 对当前右击project-->Build Path--->Configure Build Path--->Java Bu ...

  2. 获取客户端IP地址定位城市信息

    获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...

  3. 22. 使用 awk / grep / head / tail 命令进行文本 / 日志分析 (/home/D/acc.log)

    一.awk     # 统计 a-read-file 接口 中,接口耗时 超过 0.007 秒的有多少个请求     D@Demon ~]$ awk '$7>0.007' acc.log | w ...

  4. javascript切换效果

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  5. Linux 与 unix shell编程指南——学习笔记

    第一章    文件安全与权限 文件访问方式:读,写,执行.     针对用户:文件属主,同组用户,其它用户.     文件权限位最前面的字符代表文件类型,常用的如         d 目录:l 符号链 ...

  6. Android 使用开源xUtils来实现多线程下载(非原创)

    1.程序员自己也是可以实现多线程下载的,只是代码量比较大,而且,其中有许多细节需要考虑到,在GitHub上有人写好的代码,我们可以拿过来使用下,节省了我们开发程序的时间 2.导包:xUtils-2.6 ...

  7. ORACLE/MYSQL/DB2等不同数据库取前几条记录

    选取数据库中记录的操作是最基础最频繁的,但往往实际应用中不会这么简单,会在选取记录的时候加上一些条件,比如取前几条记录,下面就总结了如何在ORACLE/MYSQL/DB2等一些热门数据库中执行取前几条 ...

  8. 不能修改“System Roots”钥匙串 即下载的.cer 文件添加不到钥匙串

    双击提示  :不能修改“System Roots”钥匙串要更改根证书是否会被信任,请在“钥匙串访问”中打开它,然后修改它的信任设置. 解决办法:添加到   登录或显示LOGIN的 keychain(记 ...

  9. 嵌入式Linux LED小灯点亮实验

    问:怎么写LED驱动程序? 1.搭建一个字符驱动的框架(上一节已经完成) 2.完善硬件的操作 问:驱动里操作硬件寄存器与单片机操作硬件寄存器有什么不一样的地方? 答:单片机操作的寄存器地址是物理地址, ...

  10. PHP __autoload函数知识点

    __autoload函数主要是用来包含不存在的类文件,当初始化的类不存在的时候 存在一个文件名为footer.php的文件,里面有个footer类 class footer{ public funct ...