zoukankan      html  css  js  c++  java
  • 网络编程应用:基于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();
                    }
                }
            }
        }
    }
    

    运行结果:


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

    这里写图片描述


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

    这里写图片描述

  • 相关阅读:
    Spring Boot使用Maven自定义打包方式
    Java操作FileUtils读取数据与写入数据到文件
    将Map中对应的key和value赋值到对象中
    获取List集合对象中某一列属性值
    一文告诉你如何使用java调用http接口
    无音频头音频数组,转写成可播放音频文件
    解析WAV音频文件----》生成WAV音频文件头
    Java中解析wav音频文件信息:音频声道数,采样频率,采样位数、声音尺寸
    jquery click()方法模拟点击事件对a标签不生效
    js speech
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6809618.html
Copyright © 2011-2022 走看看