网络编程应用:基于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();
                }
            }
        }
    }
}

运行结果:


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

这里写图片描述


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

这里写图片描述

posted @   TCB_Java  阅读(586)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
点击右上角即可分享
微信分享提示