IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> java学习笔记(网络编程): -> 正文阅读

[网络协议]java学习笔记(网络编程):

1.网络编程:

1)概念:

就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。

2)信三要素:

IP地址:InetAddress 网络中设备的标识,不易记忆,可用主机名
端口号 用于标识进程的逻辑地址,不同进程的标识
传输协议通讯的规则 常见协议:TCP,UDP

3)TCP,UDP区别:

              UDP
                1)属于不可靠协议
                2)不需要建立连接通道,所以执行效率高,但是安全性低!
                3)发送内容的时候,有大写数据!

              TCP/IP协议
                1)属于可靠协议
                2)需要建立连接通道,
                      服务器端监听客户端连接,如果客户端没有跟服务器端口进行绑定,
                          服务器一直等待,执行效率低,但是安全性高
                3)发送内容的时候,数据大小没有限制!

3)UDP:

1.UDP协议方式发送端的代码实现思想:
   1)创建UDP发送端的Socket对象
   2)创建数据报包
   3)发送
   4)释放资源
      socket对象.close()
2.UDP接收端的代码实现思想:
   1)创建接收端的Socket对象
   2)创建一个接收容器: 自定义一个缓冲区byte[]  (创建数据包报)
   3)接收
   4)解析真实数据
  5)展示ip和发送的内容

 接收端的接收数据并且将数据展示出来! 模拟真实场景,不需要关闭
3.案例:
----------------------------------键盘录入--------------------------------------
* UDP协议方式发送端的代码实现
 *
 * 1)创建UDP发送端的Socket对象
 * 2)创建数据报包
 * 3)发送
 * 4)释放资源
 *      socket对象.close()
 *
 *
 *
 *      UDP发送端不断的键盘录入数据,接收端的接收数据并且将数据展示出来!
 *
 *              Scanner sc  = new Scanner(System.in) ;
 *              BufferedReader(new InputStreamReader(System.in)) ;
 *
 *
 */
public class SendDemo {
    public static void main(String[] args) throws Exception {

        //1)创建UDP发送端的Socket对象
        //public DatagramSocket()  throws SocketException
        DatagramSocket ds = new DatagramSocket() ;
        //创建一个BufferedReader流对象:键盘录入
        BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in)) ;
        String line = null ;
        while((line=br.readLine())!=null){
            //自定义结束条件
            if("886".equals(line)){
                break ;
            }
            //2)创建数据报包---- >包含ip和端口+里面的数据
            //DatagramPacket
            //public DatagramPacket(byte[] buf ,int length,InetAddress address,int port)
            DatagramPacket dp = new DatagramPacket(line.getBytes(),line.getBytes().length,
                    InetAddress.getByName("10.12.159.158"),10086) ;
            //3)发送
            //public void send(DatagramPacket p)
            ds.send(dp) ;
        }
        //4)释放资源
        ds.close() ;
    }
}
* UDP接收端的代码实现
 * 1)创建接收端的Socket对象
 * 2)创建一个接收容器: 自定义一个缓冲区byte[]  (创建数据包报)
 * 3)接收
 * 4)解析真实数据
 * 5)展示ip和发送的内容
 *
 *接收端的接收数据并且将数据展示出来! 模拟真实场景,不需要关闭
 *
 */
@SuppressWarnings("all")
public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //1)创建接收端的Socket对象DatagramSocket
        //public DatagramSocket(int port)
        DatagramSocket ds = new DatagramSocket(10086) ;
        while(true){
            //创建一个接收容器: 自定义一个缓冲区byte[]
            byte[] bytes = new byte[1024] ;
            int length = bytes.length ;
            //(创建数据包报)
            //public DatagramPacket(byte[] buf,int length)
            DatagramPacket dp = new DatagramPacket(bytes,length) ;

            //3)接收
            // public void receive(DatagramPacket p)
            ds.receive(dp);

            //4)解析接收容器中的真实内容
            //public byte[] getData():获取缓冲区中的真实的字节数组
            //public int getLength():获取缓冲区中的长度
            //获取实际内容
            String str = new String(dp.getData(),0,dp.getLength()) ;
            //获取ip地址
            //public InetAddress getAddress()
            String ip = dp.getAddress().getHostAddress() ;
            System.out.println("data from "+ip +",content is :"+str) ;
        }

        //释放资
        ds.close() ;

    }
}
----------------------------------线程--------------------------------------

public class SendThread implements Runnable {
    private DatagramSocket ds ;
    public SendThread(DatagramSocket ds) {
        this.ds = ds ;
    }

    @Override
    public void run() {

        try {
            //创建一个BufferedReader流对象:键盘录入
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in)) ;
            String line = null ;
            while((line=br.readLine())!=null){

                //自定义结束条件
                if("886".equals(line)) {
                    break;
                }
                DatagramPacket dp = new DatagramPacket(line.getBytes(),line.getBytes().length,
                        InetAddress.getByName("10.12.159.190"),8888) ;
                //3)发送
                //public void send(DatagramPacket p)
                ds.send(dp) ;

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4)释放资源
        ds.close() ;
    }
}
public class ReceiveThread implements Runnable {
    private  DatagramSocket ds ;
    public ReceiveThread(DatagramSocket ds) {
        this.ds = ds ;
    }

    @Override
    public void run() {
        try {
            while(true){
                //创建一个接收容器: 自定义一个缓冲区byte[]
                byte[] bytes = new byte[1024] ;
                int length = bytes.length ;
                //(创建数据包报)

                DatagramPacket dp = new DatagramPacket(bytes,length) ;

                //3)接收
                //public void receive(DatagramPacket p)
                ds.receive(dp);
                //获取实际内容
                String str = new String(dp.getData(),0,dp.getLength()) ;
                //获取ip地址
                //public InetAddress getAddress()
                String ip = dp.getAddress().getHostAddress() ;
                System.out.println("data from "+ip +",content is :"+str) ;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        //释放资
        //ds.close() ;
    }
}
*  改进:UDP的发送端和接收端在一个窗口中进行聊天
 *  UDP的发送端不断键盘录入数据,接收端不断的接收数据并且站数据数据:一个窗口中聊天呢
 *
 *      多线程
 *          使用多线程实现方式2来实现
 *          分析
 *              1)SendThread:发送端的线程资源类  实现 Runnable接口  ,实现run方法
 *              2)ReveiveThread:接收端的线程资源类 实现Runnable接口 ,实现run方法汇总
 *              3)创建资源类对象
 *              4)创建Thread类对象,将上面的资源类对象作为参数传递
 *
 */
public class ChatRoomDemo {
    public static void main(String[] args) throws SocketException {

        //主线程中
        //分别此处创建发送端的Socket以及接收端的Socket
        //发送端的Socket
        DatagramSocket sendDs = new DatagramSocket() ;
        //接收端的Socket
        DatagramSocket receiveDs = new DatagramSocket(8888) ;

        //创建发送端的资源类对象
        SendThread st = new SendThread(sendDs) ;
        //创建接收端的资源类对象
        ReceiveThread rt = new ReceiveThread(receiveDs) ;

        //创建线程
        Thread t1 = new Thread(st) ;
        Thread t2 = new Thread(rt) ;
        t1.start() ;
        t2.start() ;
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:49:11  更:2021-10-30 12:49:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:37:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码