Socket网络通信基于TCP/DUP实现

网络通信Socket通信

一、Socket是什么?

socket 通信技术就是两台联网的计算机之间交换数据的技术。它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

1.应用场景

在一个对外交互项目中,要实现我我们系统与外界系统
进行数据传输、文件信息交换比如XML报文方式等,就要用到Socket。可能你觉得你没用过其实不然,因为大部分公司都会封装自己的架构,同样也会把Socket的底层封装好,让你直接用就可以啦,但是我们还是要去了解他的底层实现,这样会更了解系统之间的交互方式。

二、基于TCP协议进行通信

1.优点

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

2.创建SocketService服务端

注意IP、端口号信息。

public class FuWuSocket_TCP {
    
    
    public static void main(String[] args) {
    
    
        ServerSocket ss=null;
        Socket s=null;
        BufferedReader reader=null;
        try {
    
    
             ss = new ServerSocket(10001);
            System.out.println("TCP服务端启动啦。。。。");
            //接受客户端请求
             s = ss.accept();
             //获得流的对象
            InputStream inputStream = s.getInputStream();
            reader = new BufferedReader(new InputStreamReader(inputStream));
            while (true){
    
    
                String line = reader.readLine();
                if("exit".equals(line)){
    
       //判断接受的数据如果为exit就跳出循环
                     break;
                }
                InetAddress adders = s.getInetAddress();
                //获取客户端IP地址
                String ip = adders.getHostAddress();
                System.out.println(ip+"TCP_发送了"+line);
            }

        } catch (Exception e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            try {
    
    
                if(reader!=null){
    
    
                      reader.close();
                }
                if(s!=null){
    
    
                    s.close();
                }
                if(ss!=null){
    
    
                    ss.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

3.创建Socket客户端

注意IP、端口号信息。服务端ip端口

public class KeHuSocket_TCP {
    
    
    public static void main(String[] args) {
    
    
          //创建请求的socket
        Socket s=null;
        BufferedWriter Writer=null;
        BufferedReader reader=null;
        try {
    
    
            s = new Socket("127.0.0.1",10001);
            //获得输出流
            OutputStream out = s.getOutputStream();
             Writer = new BufferedWriter(new OutputStreamWriter(out));
            reader = new BufferedReader(new InputStreamReader(System.in));
            String line=null;
            while (true){
    
    
                line=  reader.readLine();//读取每行

                 Writer.write(line);
                 Writer.newLine();
                 Writer.flush();
                if("exit".equals(line)){
    
    
                    break;
                }
             }

        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            try {
    
    
                if(Writer!=null){
    
    
                    Writer.close();
                }
                if(s!=null){
    
    
                    s.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

4.演示结果

TCP服务端启动
在这里插入图片描述
TCP客户端启动
在这里插入图片描述
客户端与服务端交互信息展示
客户端发送。。。
在这里插入图片描述
服务端接收啦。。。。。yyds
在这里插入图片描述

三、基于DUP协议进行通信

1.优点

UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。

2.创建SocketService服务端

注意IP、端口号信息。服务端ip端口

public class FuWuSocket_UDP {
    
    
    public static void main(String[] args) {
    
    
        DatagramSocket socket=null;
        try {
    
    
            socket=new DatagramSocket(10000);
            //创建一个字节书数组
            byte[] bt=new byte[1024];
            //创建数据包
            DatagramPacket   pk=new DatagramPacket(bt,bt.length);
            System.out.println("DUP服务端启动啦。。。。");
            while (true){
    
    
                //接受数据。。。阻塞状态
                socket.receive(pk);
                //获取客户端IP
                InetAddress inetAddress=pk.getAddress();
                //获取数据
                byte[] by=pk.getData();
                //获取数据包长度
                int Length= pk.getLength();
                String str=new String(by,0,Length);
                System.out.println(inetAddress.getHostAddress()+"接受的数据是"+str);
            }

        } catch (Exception e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            if(socket!=null){
    
    
                socket.close();
            }
        }
    }
}

3.创建Socket客户端

注意IP、端口号信息

public class KeHuSocket_DUP {
    
    
    public static void main(String[] args) {
    
    
        //创建客户端udp的socket
        DatagramSocket socket=null;
        BufferedReader bufferedReader=null;
        try {
    
    
            //系统控制台输入数据
            bufferedReader=  new BufferedReader(new InputStreamReader(System.in));
            socket=new DatagramSocket();
            String str=null;
            while((str=bufferedReader.readLine()) != null){
    
    
                if("exie".equals(str)){
    
    
                     break;
                }
                byte[] bs=str.getBytes();
                //创建数据包
                DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(), InetAddress.getByName("127.0.0.1"),10000);
                //发送数据
                socket.send(dp);

            }
            System.out.println("退出客户端");
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            try {
    
    
                if(bufferedReader!=null){
    
    
                    bufferedReader.close();
                }
                if(socket!=null){
    
    
                    socket.close();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }

        }
    }
}

4.演示结果

DUP服务端启动。。。。。
在这里插入图片描述
DUP客户端启动。。。。。
在这里插入图片描述
DUP客户端与DUP服务端交互信息展示
DUP客户端发送。。。
在这里插入图片描述
服务端接收啦。。。。。yyds
在这里插入图片描述

总结

TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

猜你喜欢

转载自blog.csdn.net/zhx__/article/details/119810155
今日推荐