ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

网络编程TCP/UDP

2021-06-05 22:59:15  阅读:145  来源: 互联网

标签:UDP java socket 编程 TCP IOException new import net


网络编程

如何实现网络的通信

  • ip
  • 端口号
  • 192.168.1.1:3600

网络模型

TCP/IP四层概念模型:应用层、传输层、网络层、数据链路层 。

  • 应用层:HTTP···
  • 传输层:TCP/UDP
  • 网络层:IP/ICMP···
  • 数据链路层:FDDI、PPP···

TCP发送消息接受消息

tcp客户端

package com.seadun.demo.seadun.net.tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/*
 * @desc  tcp客户端
 * @author qihao
 * @date 2021/6/5 18:00
 * @param
 * @return
 */
public class TcpClientDemo01 {
    public static void main(String[] args) {
        Socket socket = null;
        OutputStream outputStream = null;
//        1.我们要知道服务器地址端口号
        try {
            InetAddress address = InetAddress.getByName("127.0.0.1");
            int port = 9999;
//        2. 我们创建一个socket连接
            socket = new Socket(address, port);
//        3. 我们向socket发送io消息流
            outputStream = socket.getOutputStream();
            outputStream.write("特殊机密".getBytes());
            System.out.println("你好,客户端已经发送消息");
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


tcp服务端(一直开启)

package com.seadun.demo.seadun.net.tcp;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
 * @desc tcp服务端
 * @author qihao
 * @date 2021/6/5 18:00
 * @param
 * @return
 */
public class TcpServiceDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream inputStream = null;
        ByteArrayOutputStream baos = null;
        try {
//           要有一个地址端口,ip为localhost
            serverSocket = new ServerSocket(9999);
            while (true) {
//           等待客户端连接过来,使用serverSocket。accept进行接收
                socket = serverSocket.accept();
//           读取客户端发过来的消息
                inputStream = socket.getInputStream();
                //该方法可能导致乱码,我们使用管道流
//             byte[] buffer = new byte[1024];
//             int len;
//             while ((len = inputStream.read(buffer))!=-1){
//                 String s = new String(buffer, 0,len);
//                 System.out.println(s);
//             }
                //  管道流
                baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len;
                while ((len = inputStream.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                System.out.println(baos.toString());
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (baos != null) {
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

UCP发送消息接受消息

ucp发送端

package com.seadun.demo.seadun.net.tcp;
import java.net.*;
/*
 * @desc UDP无连接发送消息,UDP不区分客户端和服务端,都可以接受发送消息
 * @author qihao
 * @date 2021/6/5 20:34
 * @param
 * @return
 */
public class UdpDemo01 {
    public static void main(String[] args) throws Exception {
        //建立一个socket
        DatagramSocket datagramSocket = new DatagramSocket();
        //建个包
        String msg = "你好,我们是UDP连接-重要机密";
        InetAddress localhost = InetAddress.getByName("localhost");
        int port = 9090;
        //数据,数据的长度开始到结束,要发送给谁
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
        //发送包
        datagramSocket.send(packet);
        //关闭流
        datagramSocket.close();
    }
}

udp接受端

package com.seadun.demo.seadun.net.tcp;
/*
 * @desc UDP无连接发送消息,UDP不区分客户端和服务端,都可以接受发送消息
 * @author qihao
 * @date 2021/6/5 20:35
 * @param
 * @return
 */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
//还是要等待客户端的链接
public class UdpDemo02 {
    public static void main(String[] args) throws IOException {
        //开放端口
        DatagramSocket datagramSocket = new DatagramSocket(9090);
        byte[] buffer = new byte[1024];
        //接受
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
        datagramSocket.receive(packet);
        System.out.println(new String(packet.getData()));
        datagramSocket.close();
    }
}

标签:UDP,java,socket,编程,TCP,IOException,new,import,net
来源: https://blog.csdn.net/weixin_46656574/article/details/117607252

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有