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

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.lryc.cn/news/256744.html

相关文章:

  • 软件压力测试的重要性与用途
  • 【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第二次作业
  • Qt + MySQL(简单的增删改查)
  • postgresql设置免密登录
  • 视频汇聚/音视频流媒体视频平台/视频监控EasyCVR分享页面无法播放,该如何解决?
  • 机器学习-逻辑回归
  • Edge调用Aria2下载
  • 解密QQ号——C语言
  • 三、jvm中的对象及引用
  • Docker网络架构介绍
  • Android studio新版本aar包导入项目中配置
  • HBase-架构与设计
  • SpringBoot基础系列:工具类使用
  • 使用 nohup java - jar 不输出日志
  • 前端开发学习 (五) 生命周期函数、Ajax请求
  • TypeScript中的单件设计模式
  • 【无标题】安装环境
  • 一. 初识数据结构和算法
  • qt 使用百度在线地图 方法1
  • 轻快小miniconda3在linux下的安装配置-centos9stream-Miniconda3 Linux 64-bit
  • C语言——字符函数和字符串函数(一)
  • 15.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现
  • 蓝桥杯航班时间
  • openEuler学习05-kernel升级
  • Linux-centos上如何配置管理NFS服务器?
  • 自然语言处理第2天:自然语言处理词语编码
  • ES6中的Promise
  • 载入了名字空间‘htmltools’ 0.5.6,但需要的是>= 0.5.7解决方案
  • Cisco 思科路由交换网络设备 安全基线 安全加固操作
  • WPF仿网易云搭建笔记(0):项目搭建