当前位置: 首页 > article >正文

Java学习网络编程

Java学习网络编程

大纲

  1. 网络相关概念
  2. IP地址
  3. 网络协议
  4. InetAdress
  5. Socket

具体案例

1. 网络相关概念

网络
在这里插入图片描述
网络通信
在这里插入图片描述

2. IP地址

在这里插入图片描述

在这里插入图片描述

域名

在这里插入图片描述

3.网络协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. InetAdress

在这里插入图片描述
获得本机的名字和IP

 public static void main(String[] args) throws UnknownHostException {
        InetAddress inetAddress = InetAddress.getLocalHost();
        System.out.println(inetAddress);
    }

获取指定主机名字或域名的信息

public static void main(String[] args) throws UnknownHostException {
        InetAddress host1 = InetAddress.getByName("  ");
        InetAddress host2 = InetAddress.getByName("www.baidu.com");
        System.out.println(host1);
        System.out.println(host2);
    }

gethostname 是获取主机名字。或者域名
getHostAddress 是获取IP地址

public static void main(String[] args) throws UnknownHostException {
        InetAddress host1 = InetAddress.getByName("挽天");
        InetAddress host2 = InetAddress.getByName("www.baidu.com");
        String f2 = host2.getHostAddress();
        String f1 = host1.getHostAddress();
        String name = host2.getHostName();
        System.out.println(f1);
        System.out.println(f2);
        System.out.println(name);
    }

5. Socket

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
TCP编程
结束标记
通用:调用socket对象的shutdownOutput()方法
其它:在写入时可以用writeNewLine()来进行结束标记,但这要求读取必须使用readline()方法
注意:写完过后记得使用flush方法刷新
在这里插入图片描述
服务端

public class socketServer {
    public static void main(String[] args) throws IOException {
        //服务端
        //在本机的9999端口监听,等待连接
        //前提该端口没有被占用
        //这个serverSocket,可以通过accept()来返回多个socket(高并发,多个客户端来连接服务器端)
        ServerSocket serverSocket = new ServerSocket(9999);
        //当没有客户端连接该端口时。程序会堵塞等待连接
        //  如果在客户端连接,就会返回Socket对象,程序继续执行
        Socket socket = serverSocket.accept();
        //创建一个和这个socket相关的输入流
        InputStream inputStream = socket.getInputStream();
        byte [] buf = new byte[1024];
        int length = 0;
        while ((length = inputStream.read(buf)) != -1){
            //根据读取到的实际长度读取字符串
            System.out.println(new String(buf,0,length));
        }
        //创建一个socket相关的输出流
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,client".getBytes());
        outputStream.flush();
        //设置一个结束标记代表传入结束
        socket.shutdownOutput();
        //关闭流
        inputStream.close();
        outputStream.close();
        //关闭这个对象
        socket.close();
        serverSocket.close();
    }
}

客户端

public class socketClient {
    public static void main(String[] args) throws IOException {
        //客户端
        //连接服务器,里面写一个主机地址和端口,这里写的是本机
        //如果联机成功,返回一个socket对象
        Socket socket = new Socket(InetAddress.getLocalHost(),9999);
        //得到一个和socket对象关联的输出流
        OutputStream outputStream = socket.getOutputStream();
        //通过输出流,写入数据到数据通道
        outputStream.write("hello,server".getBytes());
        outputStream.flush();
        //设置一个结束标记
        socket.shutdownOutput();
        //获取和与socket相关联的输入流
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int length;
        //创建循环读取数据
        while ((length = inputStream.read(bytes)) != -1){
            System.out.println(new String(bytes,0,length));
        }
        //关闭流对象,和socket,避免资源浪费
        inputStream.close();
        outputStream.close();
        socket.close();
    }
}


http://www.kler.cn/a/231629.html

相关文章:

  • 理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作
  • PHP 表单 - 必需字段
  • Python爬虫下载新闻,Flask展现新闻(2)
  • Linux最深刻理解页表于物理内存
  • SQLite 和 MySQL语法区别
  • Python Excel XLS或XLSX转PDF详解:七大实用转换设置
  • QT QCombox 样式表 比起作用
  • Verilog刷题笔记28
  • canvas实现涂鸦画板功能
  • Apollo分布式配置中心
  • 使用QT编写一个简单QQ登录界面
  • 操作系统-【预备学习-1】(Linux 文件目录)
  • linux系统非关系型数据库redis的配置文件
  • TCP 粘包/拆包
  • 1-1 动手学深度学习v2-线性回归-笔记
  • 数模.matlab画图
  • Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>解决方案
  • 网络5.0内生安全可信体系关键技术(上)
  • Excel——分类汇总
  • 【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)
  • Java基于微信小程序的驾校报名小程序,附源码
  • Topaz Photo AI for Mac v2.3.1 补丁版人工智能降噪软件无损放大
  • Python datetime 模块的高级应用
  • [机器学习]K-means——聚类算法
  • 表单标记(html)
  • 初识C++(3)