java——socket

1 篇文章 0 订阅

摘要:
1. socket介绍
2. 端口
3. java提供网络功能类
4. socket通信模型
5. TCP,UDP的优缺点和应用场景

1、socket介绍:
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力

2、端口
1、 用于区分不同应用程序
2、 端口号的范围0~65535 其中0~1023为系统所保留
3、 IP地址和端口号组成socket,socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础
4、 http:80 tp:21 telnet:23

3、java提供的网络功能有4大类
1、 InetAddress:用于标识网络上的硬件资源(IP地址)
2、 URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
3、 Sockets:使用TCP协议实现网络通信的Socket相关的类
4、 Datagram:使用UDP协议,将数据保存在数据报红,通过网络进行通信

4、socket通信模型
socket通信模型

基于TCP协议的socket通信模型
这里写图片描述

            /*
            *客户端核心代码(异常未处理)
            */
            //1.创建客户端Socket,指定服务器地址和端口
            Socket socket=new Socket("localhost", 6666);
            //2.获取输出流,向服务器端发送信息
            OutputStream os=socket.getOutputStream();//字节输出流
            PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
            pw.write("用户名:xxx;密码:xxx");
            pw.flush();
            socket.shutdownOutput();//关闭输出流
            //3.获取输入流,并读取服务器端的响应信息
            InputStream is=socket.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            String info=null;
            while((info=br.readLine())!=null){
                System.out.println("我是客户端,服务器说:"+info);
            }
            //4.关闭资源
            br.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
            /*
            *服务端核心代码(异常未处理)
            */
            //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket=new ServerSocket(6666);
            Socket socket=null;

            System.out.println("***服务器即将启动,等待客户端的连接***");
            //循环监听等待客户端的连接
            while(true){
                //调用accept()方法开始监听,等待客户端的连接
                socket=serverSocket.accept();
                //创建一个新的线程,ServerThread是自己写的一个多线程处理类,用于读取和响应客户端
                ServerThread serverThread=new ServerThread(socket);
                //启动线程
                serverThread.start();

                System.out.println("客户端的数量:"+count);
                InetAddress address=socket.getInetAddress();
                System.out.println("当前客户端的IP:"+address.getHostAddress());
            }

基于UDP协议的socket通信模型
基于UDP协议的socket通信模型

        /*
         * 客户端核心代码(异常未处理)
         */
        //1.定义服务器的地址、端口号、数据
        InetAddress address=InetAddress.getByName("localhost");
        int port=8800;
        byte[] data="用户名:admin;密码:123".getBytes();
        //2.创建数据报,包含发送的数据信息
        DatagramPacket packet=new DatagramPacket(data, data.length, address, port);
        //3.创建DatagramSocket对象
        DatagramSocket socket=new DatagramSocket();
        //4.向服务器端发送数据报
        socket.send(packet);

        /*
         * 服务端核心代码(异常未处理)
         */
        //1.创建数据报,用于接收服务器端响应的数据
        byte[] data2=new byte[1024];
        DatagramPacket packet2=new DatagramPacket(data2, data2.length);
        //2.接收服务器响应的数据
        socket.receive(packet2);
        //3.读取数据
        String reply=new String(data2, 0, packet2.getLength());
        System.out.println("我是客户端,服务器说:"+reply);
        //4.关闭资源
        socket.close();

5、TCP,UDP的优缺点和应用场景
1、优缺点分析:

TCP的优点:
TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

TCP的缺点:
TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。也正因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

UDP的优点:
UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……

UDP的缺点:
不稳定,在数据传递时,如果网络质量不好,就会很容易丢包。

2、应用场景
TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。(如HTTP、SMTP、QQ文件传输…)

UDP:
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快(如QQ语音、QQ信息、QQ视频…)


PS:博文中如有什么不对的地方恳请大家指出,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值