• 网络编程应用:基于TCP协议【实现一个聊天程序】


    要求:

    基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据
    

    客户端代码:

    package Homework1;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    
    public class Client {
        public static void main(String[] args){
    
            System.out.println("客户端已启动");
            Socket socket=null;
            InputStream is=null;
            OutputStream os=null;
            try {
                //1.创建客户端套接字Socket对象
                socket=new Socket("Localhost", 8888);
    
                //2.创建与Socket对接的输入输出流对象
                is=socket.getInputStream();
                os=socket.getOutputStream();
    
                //3.创建聊天用的Scanner对象
                Scanner input=new Scanner(System.in);
                byte[] bs=new byte[1024];
    
                //4.给服务器(乙方)发送信息
                while(true){
                    //输入要发送的数据
                    String string=input.next();
                    //将数据传输出去
                    os.write(string.getBytes());
                    os.flush();
                    //如果有一方回复了:bye,则表示聊天结束
                    if(string.equals("bye")){
                        break;
                    }
    
                    //5.接收服务器(乙方)回复的消息
                    int count=is.read(bs);
                    if(new String(bs,0,count).equals("bye")){
                        break;
                    }
                    System.out.println("服务器回复:"+new String(bs,0,count));
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(socket!=null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(os!=null){
                    try {
                        os.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(is!=null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
    
        }
    }
    

    服务端:

    package Homework1;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class Server {
        public static void main(String[] args){
            System.out.println("服务端已启动");
    
            ServerSocket serverSocket=null;
            InputStream is=null;
            OutputStream os=null;
    
            try {
                //1.创建服务器端ServerSocket对象
                serverSocket=new ServerSocket(8888);
    
                //2.得到Socket对象
                socket=serverSocket.accept();
                //3.得到与Socket对应的输入输出流
                is=socket.getInputStream();
                os=socket.getOutputStream();
    
                //4.创建聊天使用的Scanner对象
                Scanner input=new Scanner(System.in);
                byte[] bs=new byte[1024];
    
                while(true){
                    //5.接收客户端(甲方)信息
                    int count=0;
                    count=is.read(bs);
    
                    //如果客户端回复了:bye,表示结束聊天
                    if(new String(bs,0,count).equals("bye")){
                        break;
                    }
                    System.out.println("客户端说:"+new String(bs,0,count));
    
                    //6.回复客户端(甲方)
                    String string=input.next();
                    os.write(string.getBytes());
                    os.flush();
                    if(string.equals("bye")){
                        break;
                    }
                }
    
    
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(os!=null){
                    try {
                        os.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(is!=null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(socket!=null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(serverSocket!=null){
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    运行结果:


    客户端(甲方)聊天列表:

    这里写图片描述


    服务器端(乙方)聊天列表:

    这里写图片描述

  • 相关阅读:
    Spyder集成开发环境(python)
    Anaconda下载和安装指南(史上最全)
    FM算法(二):工程实现
    FM算法(一):算法理论
    易出错的C语言题目之二:指针
    易出错的C语言题目之一:宏定义与预处理
    浅谈压缩感知(三十一):压缩感知重构算法之定点连续法FPC
    浅谈压缩感知(三十):压缩感知重构算法之L1最小二乘
    浅谈压缩感知(二十九):压缩感知算法之迭代硬阈值(IHT)
    浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6809618.html
Copyright © 2020-2023  润新知