Java中Socket实现数据通信的示例代码

 更新时间:2023年09月04日 09:02:04   作者:江 流 儿  
本文主要介绍了Java中Socket实现数据通信的示例代码,Socket可以建立起客户端和服务器之间的连接,实现数据的传输和交互,感兴趣的可以了解一下

前言

本文主要是为下一篇Websockt做铺垫,大家了解socket的一些实现。

网络编程三要素

网络编程是指利用计算机网络进行程序设计、开发的技术。网络编程主要包含三个要素,分别是:

  • IP地址和端口号
  • 传输协议
  • Socket

IP地址和端口号

在计算机网络中,每台计算机都有一个IP地址,用于唯一标识该计算机在网络中的位置。IP地址由32位二进制数表示,通常采用点分十进制表示法,如192.168.1.1。

端口号是指计算机中应用程序与网络之间进行交互时,用于标识该应用程序的一个标识符。端口号是一个16位的无符号整数,取值范围为0-65535,其中0-1023为系统保留端口号,一般用于系统服务。

传输协议

在互联网中,主要有两种传输协议,分别是TCP协议和UDP协议。

TCP协议是一种可靠的面向连接的传输协议。在TCP协议中,数据传输前需要先建立连接,通过三次握手进行确认,保证数据传输的可靠性。TCP协议适用于对数据传输可靠性要求较高的应用场合,如文件传输、电子邮件等。

UDP协议是一种不可靠的无连接传输协议。在UDP协议中,数据在传输过程中不需要建立连接,也不需要进行数据确认。UDP协议适用于对数据传输可靠性要求较低的应用场合,如音视频传输、在线游戏等。

Socket

Socket是一种通信协议,可以实现不同计算机之间的网络通信。使用Socket开发网络应用程序,可以实现客户端与服务器之间的数据交换,比如网页数据、文件传输等。在Java中,可以使用Socket类实现TCP协议的Socket连接。客户端通过创建Socket对象并指定服务端的IP地址和端口号来连接服务端。服务端通过创建ServerSocket对象并监听客户端的请求,等待客户端连接。

使用Scoket实现网络通信

TCP

TCP通信-发送方

public class Client {
    public static void main(String[] args) throws IOException {
        //TCP协议,发送数据
        //1.创建Socket对象
        //细节:在创建对象的同时会连接服务端
        //      如果连接不上,代码会报错
        Socket socket = new Socket("127.0.0.1",10000);
        //2.可以从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("aaa".getBytes());
        //3.释放资源
        os.close();
        socket.close();
    }
}

TCP通信-接收方

public class Server {
    public static void main(String[] args) throws IOException {
        //TCP协议,接收数据
        //1.创建对象ServerSocker
        ServerSocket ss = new ServerSocket(10000);
        //2.监听客户端的链接
        Socket socket = ss.accept();
        //3.从连接通道中获取输入流读取数据
        InputStream is = socket.getInputStream();
        int b;
        while ((b = is.read()) != -1){
            System.out.println((char) b);
        }
        //4.释放资源
        socket.close();
        ss.close();
    }
}

结果

UDP

UDP通信-发送方

package com.utils;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
 * @BelongsProject: CSDN_score
 * @BelongsPackage: com.utils
 * @Author:qiutianshuo
 * @Description:
 * @CreateTime: 2023-09-01 11:24
 * @Version: 1.0
 */
public class SendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象(DatagramSocket)
        // DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
        DatagramSocket ds = new DatagramSocket();
        //创建数据,并把数据打包
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        //构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
        byte[] bys = "hello,udp,我来了".getBytes();
        DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("127.0.0.1"),10086);
        //调用DatagramSocket对象的方法发送数据
        //void send(DatagramPacket p) 从此套接字发送数据报包
        ds.send(dp);
        //关闭发送端
        //void close() 关闭此数据报套接字
        ds.close();
    }
}

UDP通信-接收方

package com.utils;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ReceiveMessageDemo {
    public static void main(String[] args) throws IOException {
        //接收数据
        //1.创建DatagramSocket对象(快递公司)
        //细节:
        //在接收的时候,一定要绑定端口
        //而且绑定的端口一定要跟发送的端口保持一致
        DatagramSocket ds = new DatagramSocket(10086);
        //2.接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        //该方法是阻塞的
        //程序执行到这一步的时候,会在这里死等
        //等发送端发送消息
        System.out.println(11111);
        ds.receive(dp);
        System.out.println(2222);
        //3.解析数据包
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到数据" + new String(data,0,len));
        System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口发出的");
        //4.释放资源
        ds.close();
    }
}

结果

总结

网络编程是现代计算机技术中非常重要的一部分,上述三要素是网络编程的基础。要实现网络编程,需要了解IP地址和端口号的概念和使用,掌握TCP协议和UDP协议的特点和使用,以及掌握Socket编程相关知识和技能。同时在实现过程中也需要注意安全性问题,例如加密数据传输、防止数据篡改等。

维度TCP协议UDP协议
传输可靠性面向连接、可靠传输数据无连接、不可靠传输数据
连接方式三次握手连接方式无连接方式
传输效率传输效率较低传输效率较高
数据包大小数据包大小不固定数据包大小固定
应用场景适用于对数据传输可靠性要求较高的应用场合,如文件传输、电子邮件等适用于对数据传输可靠性要求较低的应用场合,如音视频传输、在线游戏等
错误检测支持错误检测和重传机制不支持错误检测和重传机制
拥塞控制有拥塞控制机制,能够避免网络拥塞没有拥塞控制机制,可能导致网络拥塞
数据顺序保证数据传输顺序不保证数据传输顺序
连接数量连接数量受限于系统内存和处理器能力连接数量受限于系统内存和处理器能力

到此这篇关于Java中Socket实现数据通信的示例代码的文章就介绍到这了,更多相关Java Socket数据通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • java实现单链表倒转的方法

    java实现单链表倒转的方法

    这篇文章主要为大家详细介绍了java实现单链表倒转的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • java中sleep方法和wait方法的五个区别

    java中sleep方法和wait方法的五个区别

    这篇文章主要介绍了java中sleep方法和wait方法的五个区别,sleep 方法和 wait 方法都是用来将线程进入休眠状态,但是又有一些区别,下面我们就一起来看看吧
    2022-05-05
  • Java反转字符串的10种方法

    Java反转字符串的10种方法

    这篇文章主要介绍了Java反转字符串的10种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来一起学习一下吧
    2019-06-06
  • spring为java.util.Properties类型的属性进行赋值过程解析

    spring为java.util.Properties类型的属性进行赋值过程解析

    这篇文章主要介绍了spring为java.util.Properties类型的属性进行赋值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 深入解析Java编程中方法的参数传递

    深入解析Java编程中方法的参数传递

    这篇文章主要介绍了Java编程中方法的参数传递,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Java构造代码块,静态代码块原理与用法实例分析

    Java构造代码块,静态代码块原理与用法实例分析

    这篇文章主要介绍了Java构造代码块,静态代码块,结合实例形式分析了Java构造代码块,静态代码块的功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • Spring之Environment类的使用方式

    Spring之Environment类的使用方式

    这篇文章主要介绍了Spring之Environment类的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 基于Spring上下文工具类 ApplicationContextUtil

    基于Spring上下文工具类 ApplicationContextUtil

    这篇文章主要介绍了基于Spring上下文工具类 ApplicationContextUtil,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot 如何实时刷新静态文件

    SpringBoot 如何实时刷新静态文件

    这篇文章主要介绍了SpringBoot如何实时刷新静态文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • jar命令的用法详解

    jar命令的用法详解

    这篇文章主要介绍了jar命令的用法,非常实用,需要的朋友可以参考下
    2014-08-08

最新评论