zoukankan      html  css  js  c++  java
  • 网络编程

    *java.lang.*:java的核心类
    *java.util.*:工具包
    *java.text.*:格式化输出的类 (SimpleDataFormat)
    *java.io.*:保存与IO流操作相关类和接口
    *java.net.*:保存与网络通信相关类和接口
    *IPv4地址是有32为二进制组成,IPv6是128为的二进制组成,用于表示唯一表示网络上的计算机
    *端口号:用于表示一台计算机上不同的服务,取值范围0~66535
    * 0~1023系统服务占用
    * 常用的端口:
    * ftp的端口号:21
    * www服务器:80
    * oracle:1521
    * mysql:3306
    * sqlserver:1433
    *
    *java.net.InetAddress类:此类表示互联网协议 (IP) 地址。 没有端口
    *构造函数:没有
    *常用方法:
    *获取InetAddress对象的方法
    * getByName(String host)在给定主机名的情况下确定主机的 IP地址。
    * getAllByName(String host) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
    * getLocalHost():返回本地主机。
    *
    *实例方法:
    * getHostName() 获取此 IP 地址的主机名。
    * getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
    * toString() 将此 IP 地址转换为 String。 主机名/IP地址


    *
    * java.net.InetSocketAddress:此类实现 IP套接字地址(IP 地址 + 端口号)。主要用于Socket编程
    * 构造函数:
    * InetSocketAddress(InetAddress addr, int port) 根据 IP 地址和端口号创建套接字地址。
    * InetSocketAddress(int port) 创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。
    * InetSocketAddress(String hostname, int port) ** 根据主机名和端口号创建套接字地址。
    * 常用方法:
    * getAddress()获取 IP 地址。
    * getPort()获取端口号。
    * getHostName() 获取 IP 地址的主机名。


    * http://www.jd.com:80/index.html ftp://192.168.1.23/test/index.html
    * URL(Uniform Resource Locator):统一资源定位符,它是指向互联网“资源”的指针。
    * 组成部分:
    * 1.协议(http,https,ftp...),在://前面的部分
    * 2.主机域名部分: www.jd.com 192.168.1.23
    * 3.端口部分:80
    * 4.资源路径(资源名称): index.html /test/index.html
    *java.net.URL
    * 构造函数:
    * URL(String spec)根据 String 表示形式创建 URL 对象。
    * URL url = new URL("http://www.jd.com:80/test/index.html");
    * URL(String protocol, String host, int port, String file)根据指定 protocol、host、port 号和 file 创建 URL 对象。
    * URL url = new URL("http","www.jd.com",80,"/test/index.html");
    * 常用的方法:
    * getHost()获取此 URL 的主机名(如果适用)。
    * getFile() 获取此 URL 的文件名。
    * getPort() 获取此 URL 的端口号。
    * getProtocol()获取此 URL 的协议名称。
    * openStream()打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。


    单线程存在的问题:当多个用户同时访问时,用户只能按照访问顺序进行等待。
    * 解决方案:
    * 利用多线程实现同时处理多个用户请求:为每一个客户端的请求单独创建一个线程
    *HashMap与Hashtable的区别
    *1.HashMap是非线程安全,而Hashtable是线程安全的适合在多线程中使用
    *2.HashMap键和值都可以为null,Hashtable则不然

    单项通信:

    * 单项通信:顾客--->客服发送消息--->客服获取消息并展示
    * java.net.DatagramSocket:此类表示用来发送和接收数据报包的套接字。 (发送电报的电台)
    * 作用:发送和接受数据报包
    * 构造函数:
    * DatagramSocket():构造数据报套接字并将其绑定到本地主机上任何可用的端口。
    * DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。
    *常用方法:
    * send(DatagramPacket p)从此套接字发送数据报包。
    receive(DatagramPacket p)从此套接字接收数据报包。
    close() 关闭此数据报套接字。

    * java.net.DatagramPacket:此类表示数据报包。 类似于信封(封装信和收件人地址信息)
    * 作用:用于封装内容数据和目的地的地址
    * 构造函数:
    * DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。


    * 服务器端:客服
    * java.net.DatagramPacket:数据报包用来实现无连接包投递服务
    * 构造函数:
    * DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。
    * DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
    常用方法:
    getAddress() 获取发送方的IP地址
    getData() 返回数据缓冲区。
    getPort() 获取端口
    getLength() 返回将要发送或接收到的数据的长度。




    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;

    /**
    * 利用UDP实现多次双向交互
    * 一次单向
    * 一次双向
    * 多次双向
    *
    * UDP和TCP通信的区别
    * 1.是否面向连接:TCP是面向连接,点对点的通信, 而UDP是非连接的
    * 2.可靠性:TCP传输数据内容可靠,而UDP数据的顺序无法确定,不可靠
    * 3.传输大小:TCP无限制,UDP单包的传输大小限制在64K以内。
    * 4.传输效率: UDP>TCP
    */
    public class UdpClient {
    public static void main(String[] args) throws Exception{
    Scanner input = new Scanner(System.in);
    //1.创建数据报套接字
    DatagramSocket datagramSocket = new DatagramSocket(6666);
    while(true){
    String content = input.nextLine();
    byte[] bs = content.getBytes();
    //2.创建数据报包
    DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length, InetAddress.getLocalHost(), 8888);
    //3.发送数据
    datagramSocket.send(datagramPacket);
    if("bye".equals(content)){
    break;
    }
    //4.接受数据报包
    byte[] bs2 = new byte[1024];
    DatagramPacket datagramPacket2 = new DatagramPacket(bs2, bs2.length);
    datagramSocket.receive(datagramPacket2);
    //5.获取数据报包中数据
    byte[] data = datagramPacket2.getData();
    System.out.println("客服说:"+new String(data,0,data.length));
    }
    //6.关闭套接字
    datagramSocket.close();
    }
    }




    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    /**
    * 客服
    * @author Administrator
    *
    */
    public class UdpServer {
    public static void main(String[] args) throws Exception{
    Scanner input = new Scanner(System.in);
    //1.创建数据报套接字
    DatagramSocket datagramSocket = new DatagramSocket(8888);
    while(true){
    //2.接受数据报包
    byte[] bs2 = new byte[1024];
    DatagramPacket datagramPacket2 = new DatagramPacket(bs2, bs2.length);
    datagramSocket.receive(datagramPacket2);
    //3.获取数据报包中数据
    byte[] data = datagramPacket2.getData();
    System.out.println("顾客说:"+new String(data,0,data.length));

    String content = input.nextLine();
    byte[] bs = content.getBytes();
    //4.创建数据报包
    DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length, InetAddress.getLocalHost(), 6666);
    //5.发送数据
    datagramSocket.send(datagramPacket);
    if("bye".equals(content)){
    break;
    }

    }
    //6.关闭套接字
    datagramSocket.close();
    }
    }








  • 相关阅读:
    Visual Studio中配置Beyond Compare为版本比较工具
    Restsharp常见格式的发送分析
    dex2jar反编译dex文件
    Apktool反编译apk资源文件
    远程桌面复制粘贴突然失效的问题
    C#4.0 HTTP协议无法使用TLS1.2的问题
    TFS-Git官方教程
    git 换行符问题
    NPM升级
    NodeJS笔记(一)-免安装设置
  • 原文地址:https://www.cnblogs.com/seePoppy/p/6879981.html
Copyright © 2011-2022 走看看