29 java网络编程

简介: TCP协议,三次握手,安全但是比较慢,适合传送大量数据

1 🚩TCP协议,三次握手,安全但是比较慢,适合传送大量数据


1.1 🏔️TCP编程用到的类


(1)InetAddress类


方法

说明

getLocalHost

获取本机IneAddress对象

getByName

根据制定主机名/域名获取IP地址

getHostName

获取IneAddress对象的主机名

getHostAddress

获取InetAddress对象地址


(2)Socket(插座)


使用步骤

服务端:

①创建 ServerSocket对象,指定端口

②ServersSocket的accept方法会返回一个Socket对象;【在服务器端获得插座】

③Socket对象提供了getOutputStream()方法和getInputStream()方法会返回字符流

客户端:

①创建Socket对象,指定服务器ip地址和端口

②通过Socket提供的方法,获得IO流进行相关操作

【注意: 发送完一次数据需要用,Socket提供的shutdownOutput()方法告诉对象已经发送完毕,最后要关闭Socket和IO流】


🌰server端代码示例:


public class serverDemo {
    public static void main(String[] args) throws IOException {
//        创建ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器端口9999等待连接。。。");
//        获取Socket对象
        Socket socket = serverSocket.accept();
        InputStream inputStream  = socket.getInputStream();
        byte [] buffer = new byte[1024];
        int leng = 0;
        while ((leng = inputStream.read(buffer)) != -1){
            System.out.print(new String(buffer,0,leng));
        }
        System.out.println();
        //        回应数据
        OutputStream outputStream = socket.getOutputStream();
        byte  [] bufferser = "你好client".getBytes();
        outputStream.write(bufferser);
        socket.shutdownOutput();
        System.out.println("server回应完毕");
        socket.close();
        inputStream.close();
        outputStream.close();
    }
}


🌰client端代码示例:


public class ClientDemo {
    public static void main(String[] args) throws IOException {
//        创建Socket对象,连接服务器
        Socket socket = new Socket("127.0.0.1",9999);
        OutputStream outputStream = socket.getOutputStream();
        byte  [] buffer = "你好server".getBytes();
//        发送数据
        outputStream.write(buffer);
//        告诉对方发送完毕,否则会阻塞
        socket.shutdownOutput();
        System.out.println("client 第一次发送完毕");
//        获取回应
        InputStream inputStream  = socket.getInputStream();
        byte [] bufferclient = new byte[1024];
        int leng = 0;
        while ((leng = inputStream.read(bufferclient)) != -1){
            System.out.print(new String(bufferclient,0,leng));
        }
        System.out.println();
        socket.close();
        inputStream.close();
        outputStream.close();
        System.out.println("收到!退出");
    }
}


2 🚩UDP协议,可能数据丢失,适合小数据


🏔️DatagramSocket类和DatagramPacket类实现了UDP协议;


UDP编程没有明确的服务端和客户端;


🌰send端代码示例


public class SendDemo {
    public static void main(String[] args) throws IOException {
//        创建DatagramSocket对象,用于接收发送,端口9988用于接收
        DatagramSocket datagramSocket = new DatagramSocket(9988);
        byte [] sendBuffer = new byte[1024];
        sendBuffer = "四大名著是啥1?".getBytes();
//        打包数据
        DatagramPacket sendpacket = new DatagramPacket(sendBuffer, sendBuffer.length, InetAddress.getByName("127.0.0.1"), 9999);
        datagramSocket.send(sendpacket);
        System.out.println("提问完毕!");
//        接收回答
        byte [] daan = new byte[1024];
        DatagramPacket danpacket = new DatagramPacket(daan, daan.length);
        datagramSocket.receive(danpacket);
//        拆包
        int daleng = danpacket.getLength();
        byte [] danfu = danpacket.getData();
        System.out.println("回答:"+new String(danfu,0,daleng));
        datagramSocket.close();
        System.out.println("send端对话结束");
    }
}


🌰receive端代码示例:


public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
//        创建DatagramSocket对象,用于发送接受,9999端口等待接收
        DatagramSocket datagramSocket = new DatagramSocket(9999);
//        接收数据
        byte [] reciveBuffer = new byte[1024];
        DatagramPacket recdatagramPacket = new DatagramPacket(reciveBuffer,reciveBuffer.length);
        datagramSocket.receive(recdatagramPacket);
//        拆包
        int leng = recdatagramPacket.getLength();
        byte huixin [] = recdatagramPacket.getData();
        String str = new String(huixin,0,leng);
        if ("四大名著是啥?".equals(str)){
            byte h1 [] = "三国、水浒、红楼、西游".getBytes();
            DatagramPacket packet = new DatagramPacket(h1, h1.length, InetAddress.getByName("127.0.0.1"), 9988);
            datagramSocket.send(packet);
        }else {
            byte h1 [] = "what?".getBytes();
            DatagramPacket packet = new DatagramPacket(h1, h1.length, InetAddress.getByName("127.0.0.1"), 9988);
            datagramSocket.send(packet);
        }
        datagramSocket.close();
        System.out.println("receive端结束对话!");
    }
}


目录
相关文章
|
30天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
57 11
|
2月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
77 9
|
2月前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
58 7
|
5月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
69 1
|
2月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
64 13
|
2月前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
73 11
|
2月前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
162 9
|
2月前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
91 9
|
2月前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
65 5
|
2月前
|
数据采集 Java API
java怎么设置代理ip:简单步骤,实现高效网络请求
本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。