Socket和ServerSocket

18 篇文章 0 订阅
客户端发送消息,服务端接收消息
客户端
public class Client { 
    public static void main(String[] args) { 
        //1.建立一个与服务端之间的连接 
        /*** 面向连接:三次握手 
        * 创建一个Socket的对象,就相当于完成了三次握手,建立了一个安全的连接 
        */ 
        /*** Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 */ 
        //注意:包含了两个流:InputStream和OutputStream 
        Socket socket = null; 
        try {socket = new Socket(InetAddress.getByName("10.31.165.42"),7777);
        //2.将需要发送的数据写入到网络中
        /*** InputStream getInputStream()返回此套接字的输入流 。OutputStream getOutputStream()返回此套接字的输出流。
        */
        //InputStream input = new BufferedInputStream(socket.getInputStream());    
        //InputStream input = socket.getInputStream(); 
        OutputStream output = socket.getOutputStream();
        //3.写入 
        output.write("hello你好吗?".getBytes());
        output.flush(); 
    } catch (UnknownHostException e) {
        e.printStackTrace(); 
    } catch (IOException e) {
        e.printStackTrace(); 
    } finally {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    }
}

服务端

public class Server {
    public static void main(String[] args) {
        //1.实例化一个ServerSocket的对象
        /*** ServerSocket(int port)
        创建绑定到特定端口的服务器套接字。
        */
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(7777);
            //2.监听,获取连接到的客户端
            /** 
            * Socket accept()
              侦听并接受到此套接字的连接。
             */
            System.out.println("等待服务端的连接..."); 
            //注意:在未连接成功之前,将一直处于阻塞状态 
            Socket socket = serverSocket.accept();
            System.out.println("连接成功");
            //3.获取网络到内存的一个输入流
            InputStream input = socket.getInputStream();
            //4.读取数据
            byte[] arr = new byte[1024];
            int len = input.read(arr);
            String message = new String(arr, 0, len);
            //5.组织信息
            String ipString = socket.getInetAddress().getHostAddress();
            int port = socket.getPort();
            System.out.println(ipString +":" + port + "说你说:" + message);
        } catch (IOException e) {
            e.printStackTrace(); 
        }finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }     
}

 客户端发送消息,服务端回复消息

客户端

public class Client {
    public static void main(String[] args) {
        // 1.建立一个与服务端之间的连接
        /**
        * 面向连接:三次握手 创建一个Socket的对象,就相当于完成了三次握手,建立了一个安全的连接
        */
        // 注意:包含了两个流:InputStream和OutputStream
        Socket socket = null;
        try {
            socket = new Socket(InetAddress.getByName("10.31.165.42"),7777);
            // 2.将需要发送的数据写入到网络中
            OutputStream output = socket.getOutputStream();
            // 3.写入
            output.write("hello你好吗?".getBytes());
            output.flush();
            // 4.收取服务端发送来的消息
            InputStream input = socket.getInputStream();
            byte[] arr = new byte[1024];
            int len = input.read(arr);
            String message = new String(arr, 0, len);
            System.out.println("来自服务端的回复:" + message);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务端

public class Server {
    public static void main(String[] args) {
        //1.实例化一个ServerSocket的对象
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(7777);
            //2.监听,获取连接到的客户端
            System.out.println("等待服务端的连接...");
            //注意:在未连接成功之前,将一直处于阻塞状态
            Socket socket = serverSocket.accept();
            System.out.println("连接成功");
            //3.获取网络到内存的一个输入流
            InputStream input = socket.getInputStream();
            //4.读取数据
            byte[] arr = new byte[1024];
            int len = input.read(arr);
            String message = new String(arr, 0, len);
            //5.组织信息
            String ipString = socket.getInetAddress().getHostAddress();
            int port = socket.getPort();
            System.out.println(ipString +":" + port + "说:" + message);
            //6.服务端给客户端回复消息
            OutputStream output = socket.getOutputStream();
            output.write("你也好,好久不见了".getBytes());
            output.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值