java22-网络编程

这篇具有很好参考价值的文章主要介绍了java22-网络编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

  • java是internet上的语言,它从语言级上提供了对网络应用程序的支持
  • java提供网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java本机安装系统里,由JVM控制
  • 直接或者间接的通过网络协议与其它计算机实现数据交换,进行通讯

网络通信要素

通信地址

  • IP IntAddress类
  • 端口号
    端口号加IP地址组合得出一个网络套接字Socket
import org.junit.Test;

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class AddressTest {
    @Test
    public void client(){
        Socket socket = null;
        OutputStream os = null;
        try {
            InetAddress inet1 = InetAddress.getByName("127.0.0.1");
            socket = new Socket(inet1, 8080);
            os = socket.getOutputStream();
            os.write("我是客户端".getBytes());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
    @Test
    public void server(){
        ServerSocket ss = null;
        Socket accept = null;
        InputStream is = null;
        ByteArrayOutputStream bis = null;
        try {
            ss = new ServerSocket(8080);
            accept = ss.accept();
            is = accept.getInputStream();
            bis = new ByteArrayOutputStream();
            byte[] bytes = new byte[5];
            int len;
            while ((len=is.read(bytes)) !=-1){
                bis.write(bytes,0,len);
            }
            System.out.println(bis.toString());
            System.out.println(accept.getInetAddress().getHostAddress());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(ss!=null){
                try {
                    ss.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }

            }
            if(accept!=null){
                try {
                    accept.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(bis!=null){
                try {
                    bis.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

网络规则

  • TCP/IP协议
    • TCP协议使用前,必须建立TCP连接,形成传输数据通道
    • 传输前采用三次握手方式,点对点非常可靠
    • 在连接中可以进行大数据传输
    • 传输完毕,需释放已建立的连接,效率低
  • UDP协议
    • 将数据,源,目的包装成数据包,不需要建立连接
    • 每个数据包大小限制在64K内
    • 发动不管对方是否准备好,也不管是否接收到,不可靠
    • 可以广播发送
    • 发送数据完成不用释放资源,开销小,速度快
import org.junit.Test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPTest {
    @Test
    // 发送端
    public void sender(){
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket();
            String str = "我是UDP方式发送的导弹";
            byte[] bytes = str.getBytes();
            InetAddress localHost = InetAddress.getLocalHost();
            DatagramPacket dp = new DatagramPacket(bytes, 0, bytes.length, localHost, 8080);
            ds.send(dp);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(ds!=null){
                ds.close();
            }
        }
    }
    @Test
    // 接受端
    public void receiver(){
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(8080);
            byte[] bytes = new byte[100];
            DatagramPacket dp = new DatagramPacket(bytes, 0, bytes.length);
            ds.receive(dp);
            System.out.println(new String(dp.getData(),0,dp.getLength()));
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(ds!=null){
				ds.close();
            }
        }
    }
}

URL类

  • 统一资源定位符,它表示Internet上某一资源的位置
  • <传输协议>://<主机>:<端口号>/<文件名>#片段名?参数列表
import org.junit.Test;

import java.net.MalformedURLException;
import java.net.URL;

public class URLTest {
    @Test
    public void test(){
        URL url = null;
        try {
            url = new URL("http://localhost:8080/test/test.txt?text=123");
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
        // 获取URL的协议名
        System.out.println(url.getProtocol());
        // http

        // 获取URL的主机名
        System.out.println(url.getHost());
        // localhost

        // 获取URL的端口号
        System.out.println(url.getPort());
        //8080

        // 获取URL的文件路径
        System.out.println(url.getPath());
        // /test/test.txt

        // 获取URL的文件名
        System.out.println(url.getFile());
        // /test/test.txt?text=123

        // 获取URL的查询名
        System.out.println(url.getQuery());
        // text=123


    }
}

多线程服务端

客户端可以在任意时刻发送请求,而服务端必须时刻准备为客服端的请求提供反馈文章来源地址https://www.toymoban.com/news/detail-628768.html

// 创建多线程服务处理
import java.io.*;
import java.net.Socket;

public class ServerThread extends Thread{
    Socket s = null;
    public ServerThread(Socket s){
        this.s = s;
    }
    @Override
    public void run() {
        InputStream is = null;
        ObjectInputStream ois = null;
        OutputStream os = null;
        DataOutputStream dos = null;
       try {
           is = s.getInputStream();
           ois = new ObjectInputStream(is);
           User user = (User) ois.readObject();
           boolean flag = false;
           if(user.getName().equals("xiaoming")&&user.getPsw().equals("123")){
               flag = true;
           }

           os = s.getOutputStream();
           dos = new DataOutputStream(os);
           dos.writeBoolean(flag);
       } catch (IOException e) {
           throw new RuntimeException(e);
       } catch (ClassNotFoundException e) {
           throw new RuntimeException(e);
       }finally {
           try {
               dos.close();
               os.close();
               ois.close();
               is.close();
           } catch (IOException e) {
               throw new RuntimeException(e);
           }
       }

    }
}

// 服务端代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class testServe {
    public static void main(String[] args) throws Exception {
        System.out.println("服务端启动成功");
        ServerSocket ss = new ServerSocket(8080);
        int count = 0;
        // 等待信息
        while (true){
            Socket s = ss.accept();
            new ServerThread(s).start();
            count++;
            System.out.println("接收第"+count+"个信息,ID为"+s.getInetAddress());
        }
    }
}

// 客户端代码
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class TestClient {
    public static void main(String[] args) throws Exception {
        InetAddress inet1 = InetAddress.getByName("127.0.0.1");
        Socket so = new Socket(inet1, 8080);
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入账号");
        String name = scanner.next();
        System.out.println("输入密码");
        String pws = scanner.next();
        User user = new User(name,pws);

        OutputStream os = so.getOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(os);
        oos.writeObject(user);

        InputStream is = so.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        boolean b = dis.readBoolean();
        if(b){
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }

        dis.close();
        is.close();
        oos.close();
        os.close();
        so.close();

    }
}

到了这里,关于java22-网络编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 网络编程 —— 安全网络通信

    SSL(Secure Socket Layer,安全套接字层)是一种保证网络上的两个节点进行安全通信的协议。IETF(Interet Engineering Task Force)国际组织对 SSL 作了标准化,制定了 RFC2246 规范,并将其称为传输层安全(Transport Layer Security,TLS) SSL 和 TLS 都建立在 TCP/IP 的基础上,一些应用层协议,如

    2024年02月11日
    浏览(42)
  • Java网络编程(一)基本网络概念

            网络(network) 是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接,数据位转换为电磁波,通过线缆移动。不过,无线网络会通过无线电波传输数据,许多长距离的传输现在会用通过玻璃纤维发送可见光的光纤电缆来完成。传输数

    2024年02月16日
    浏览(44)
  • Java 网络编程基础

    一个网络请求、服务之间的调用都需要进行网络通讯,在日常开发时我们可能并不会关心我们的服务端是怎么接收到请求的、调用别的服务是怎么调用的,都是直接使用现成的框架或工具,比如,Tomcat、Dubbo、OkHttp等提供网络服务的框架。作为程序员,我们还是要知其然知其

    2024年02月15日
    浏览(38)
  • Java——网络编程

    InetAddress类 java.net.InetAddress类用来封装计算机的IP地址和DNS(没有端口信息),它包括一个主机名和一个ip地址,是java对IP地址的高层表示。大多数其他网络类都要用到这个类,包括Sorket、ServerSocker、URL、DatagramSorket、DatagramPacket等 常用静态方法 getLocalHost()得到本机的InetAddress对象,其

    2024年03月16日
    浏览(38)
  • Java的网络编程

    两台设备之间通过网络实现数据传输,将数据通过网络从一台设备传输到另一台设备 网络 两台或多台设备通过一定物理设备连接起来构成了网络 网络又分为: 局域网:覆盖范围最小,仅仅覆盖一个教室或一个机房 城域网:覆盖范围较大,可以覆盖一个城市 广域网:覆盖范围最大

    2024年02月12日
    浏览(37)
  • JAVA网络编程(一)

    定义 :在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 应用场景 :即时通信,网游,邮件等 不管什么场景,都是计算机与计算机之间通过网络在进行数据传输 java提供一个java.net包,可以帮助我们开发网络应用程序。 CS架构是指在远端有一个服务器Server,

    2024年02月07日
    浏览(35)
  • Java18:网络编程

    一.对象序列化: 1.对象流: ObjectInputStream 和 ObjectOutputStream 2.作用: ObjectOutputSteam:内存中的对象--存储中的文件,通过网络传输出去 ObjectInputStream:存储中的文件,通过网络传输出去--内存中的对象 3.对象的序列化机制: 对象序列化机制允许把内存中的java对象转换成平台无关

    2024年01月21日
    浏览(37)
  • Java-网络编程

    网络是指通过电缆、无线电波或者其他方法连接在一起的一系列节点的集合。在计算机科学和信息技术领域,网络特指计算机网络,它是一组相互连接的、自治的计算机系统。 🏢 边缘部分 连接网络的计算机、手机、服务器等 🔗 核心部分 路由器、交换机等设备 负责数据传

    2024年02月13日
    浏览(38)
  • 【Java】网络编程

    Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基 于Socket套接字的网络程序开发就是网络编程 流套接字 : 使用传输层TCP协议 特点 有连接,可靠传输,面向字节流,有接收缓冲区也有发送缓冲区,大小不限 对于字节流来说,可以简单

    2024年02月10日
    浏览(35)
  • Java网络编程基础

    Java网络编程基于TCP/UDP协议的基础之上,TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议,就用他两命名了。那么首先我们先介绍一下TCP和UDP的特点: 1.TCP(Transmission Control Protocol,传输控制协议

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包