TCP实现聊天

TCP实现聊天

本文使用 java 语言实现了TCP间的通信。下文中的例子没有编写用户交互性,仅仅实现了最简单的通信功能。

客户端的实现

实现思路

  • 连接服务器的Socket
  • 发送消息

实现步骤

  • 创建一个客户端Socket对象

  • 绑定服务器的IP地址和端口号

  • 使用Socket对象的getOutputStream()方法,获取输出流OutputStream对象

  • 使用输出流OutputStream对象的write()方法,给服务器发送数据

  • 释放资源(Socket)

实现代码

public class TcpClient {
    public static void main(String[] args) {
        InetAddress serverIP = null;
        OutputStream os = null;
        Socket socket = null;
        try {
            // 得到服务器的ip和端口
            serverIP = InetAddress.getByName("127.0.0.1");
            int serverProt = 9999;
            // 创建一个socket连接
            socket = new Socket(serverIP,serverProt);
            // 发送消息IO流
            os = socket.getOutputStream();
            os.write("TcpClient发送:你好".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放相应资源
            try {
                os.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务端的实现

实现思路

  • 建立服务器端口
  • 等待客户端连接
  • 接受客户端消息

实现步骤

  • 创建服务器ServerSocket对象并设置端口号

  • 使用ServerSocket对象的accept()方法,获取到请求的客户端对象Socket

  • 使用Socket对象的getInputStream()方法,获取输入流InputStream对象

  • 使用输入流InputStream对象的read()方法,读取客户端发送的数据

  • 使用Socket对象的getOutputStream()方法,获取输出流OutputStream对象

  • 释放相应资源

实现代码

 public class TcpServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        int len = 0;
        try {
            // 设置服务器端口
            serverSocket = new  ServerSocket(9999);
            while(true) {
                // 等待客户端连接
                socket = serverSocket.accept();
                // 获取客户端消息
                is = socket.getInputStream();

                // 使用管道流
                byteArrayOutputStream = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                // 判断是否存在消息
                while((len = is.read(buffer)) != -1) {
                    byteArrayOutputStream.write(buffer,0,len);
                }
                System.out.println("TcpServer接受:"+byteArrayOutputStream.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放相应资源
            try {
                byteArrayOutputStream.close();
                is.close();
                socket.close();
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

你可能感兴趣的:(JAVA学习记录,tcp/ip,java)