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端结束对话!");
    }
}


目录
打赏
0
0
0
0
3
分享
相关文章
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
95 11
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
66 23
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
104 9
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
80 7
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
Java网络编程知识点
Java网络编程知识点
85 13
|
4月前
|
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
110 11
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
266 9
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
145 9

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等