首页 > 文章列表 > Java网络编程TCP怎么实现聊天功能

Java网络编程TCP怎么实现聊天功能

java TCP
145 2023-05-02

Java网络编程TCP怎么实现聊天功能

客户端:

package com.kuang.lesson02;



import java.io.IOException;

import java.io.OutputStream;

import java.net.InetAddress;

import java.net.Socket;



//客户端

public class TcpClientDemo01 {

    public static void main(String[] args) {

        Socket socket = null;

        OutputStream os = null;



        try {

            //1、要知道服务器的地址、端口号

            InetAddress serverIP = InetAddress.getByName("127.0.0.1");

            int port = 9999;



            //2、创建一个socket连接

            socket = new Socket(serverIP, port);



            //3、发送消息IO流

            os = socket.getOutputStream();

            os.write("你好,Java".getBytes());

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (os != null) {

                try {

                    os.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if (socket != null) {

                try {

                    socket.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

服务端:

package com.kuang.lesson02;





import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;



//服务端

public class TcpServerDemo01 {

    public static void main(String[] args) {

        ServerSocket serverSocket = null;

        Socket socket = null;

        InputStream is = null;

        ByteArrayOutputStream baos = null;



        try {

            //1、我得有一个地址

            serverSocket = new ServerSocket(9999);



            while (true) {

                //2、等待客户端连接过来

                socket = serverSocket.accept();



                //3、读取客户端的消息

                is = socket.getInputStream();



                //管道流

                baos = new ByteArrayOutputStream();

                byte[] buffer = new byte[1024];

                int len;

                while ((len = is.read(buffer)) != -1) {

                    baos.write(buffer, 0, len);

                }

                System.out.println(baos.toString());

            }





        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            //关闭资源

            if (baos != null) {

                try {

                    baos.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if (is != null) {

                try {

                    is.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();

                }

            }

        }



    }

}

运行结果:

1、首先运行服务端,等待接收消息,可以发现服务端一直在运行

2、接着运行客户端,发送消息,可以发现客户端运行结束

3、返回服务端查看,可以发现服务端已经接收到了客户端发送来的消息

4、由于是循环操作,所以只要客户端发送消息来,服务端就能接收到,可以实现多次发送消息。