当前位置: 首页 > article >正文

Java利用TCP实现简单的双人聊天

一、创建新项目

首先创建一个新的项目,并命名为聊天。然后创建包,创建两个类,客户端(SocketClient)和服务器端(SocketServer)

二、实现代码

客户端代码:

package 聊天;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class SocketClient {
    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        Socket client = new Socket("localhost", 6666);
        while (true) {
           OutputStream out = client.getOutputStream();
           //从控制台输入
           System.out.println("客户端发送数据");
           String str = input.next();
           out.write(str.getBytes());
          //  System.out.println("信息发送成功"+str);
           if (str.equals("over")) {
               System.out.println("客户端已关闭");
               out.close();
               client.close();
               break;
           }
           //-------------------客户器端读取回复信息----------------------//
           InputStream in = client.getInputStream();
           //4.读取数据
           byte[] b = new byte[1024];
           int len = in.read(b);
           //接收到的数据
           String info = new String(b, 0, len);
           System.out.println("这是从客户端接收的数据:" + info);
       }
    }
}

服务器端代码:

package 聊天;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class SocketServer {
    public static void main(String[] args) throws Exception {
            System.out.println("服务器端启动,等待连接--------------");
            //1.创建ServerSocket对象,绑定端口,开始等待连接
            ServerSocket ss = new ServerSocket(6666);
            //2.接受连接,accept方法,返回Socket对象
            Socket server = ss.accept();
        while (true) {
            //3.通过Socket获取输入流
            InputStream in = server.getInputStream();
            //4.读取数据
            byte[] b = new byte[1024];
            int len = in.read(b);
            //接收到的数据
            String info = new String(b, 0, len);
            System.out.println("这是从客户端接收的数据:" + info);

            if (info.equals("over")) {

                System.out.println("服务器已关闭");
                in.close();
                server.close();
                break;
            }
//-------------------服务器端回复信息----------------------//
            System.out.println("服务器回复客户端信息:");
            OutputStream out = server.getOutputStream();
            //从控制台输入
            Scanner input = new Scanner(System.in);
            String str = input.next();
            out.write(str.getBytes());

        }
    }
}

三、运行结果

先运行服务器端,然后快速运行客户端,实现如下效果


http://www.kler.cn/news/159698.html

相关文章:

  • openssl+EVP详解
  • 数据库增删改查(CRUD)进阶版
  • 安防视频监控/视频融合/云存储EasyCVR页面数据显示不全该如何解决?
  • 【Hive】——数据仓库
  • Linux服务器超级实用的脚本
  • 海思SD3403/SS928V100开发(11)双网卡同网段外部回环搭建测试
  • 车联网架构设计(二)_消息缓存
  • C++学习之路(十五)C++ 用Qt5实现一个工具箱(增加16进制颜色码转换和屏幕颜色提取功能)- 示例代码拆分讲解
  • 每天一点python——day87
  • 网店一键搬家要用到的API接口
  • 【1day】致远A6系统任意文件下载漏洞学习
  • Pyside2 (Qt For Python)进度条功能实现
  • 【QT】Windows环境下,cmake引入QML
  • Elasticsearch 如何处理 Aggs 顺序中的大写字母和小写字母?
  • C语言每日一题(41)循环队列
  • C语言——指针(四)
  • 图扑参展高交会-全球清洁能源创新博览会
  • 从零构建属于自己的GPT系列2:模型训练1(预训练中文模型加载、中文语言模型训练、逐行代码解读)
  • 运维之远程桌面连接失败问题排查
  • java8 升级 java11
  • Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换
  • 循环队列中的求队列长度公式怎么来的?【数学角度】
  • 【华为OD题库-068】找出经过特定点的路径长度-java
  • 【数电笔记】07-基本和复合逻辑运算
  • 『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建OA系统
  • uniapp打包的h5项目多了接口调用https://api.next.bspapp.com/client
  • 1.1美术理论基础
  • 快手数仓面试题附答案
  • 流量异常-挂马造成百度收录异常关键词之解决方案(虚拟主机)
  • python内存处理和常见的内存泄漏场景