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 byte1024;

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 byte1024;

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());

}

}

}

三、运行结果

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

相关推荐
程序猿乐锅2 小时前
【黑马点评 | 第二篇】Redis 缓存更新策略与商铺缓存实现
java·网络·redis·spring·mybatis
livemetee2 小时前
MySQL联合唯一索引(code,deleted)与逻辑删除问题
java·数据库
MacroZheng2 小时前
Redis官方发布高颜值可视化工具,功能更是强的离谱!
java·redis·后端
wuyk5552 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 12 章 Linux 系统 WiFi 常用命令全集:iw/iwlist/ip/wpa_cli 实战
linux·网络·stm32·物联网·tcp/ip
wuminyu2 小时前
纯轻量级锁体系下C2编译器锁粗化和消除机制剖析
java·linux·c语言·jvm·c++
ss2732 小时前
AI全栈实战 | 1.4-02 Spring AOP:@Transactional 失效的 N 种场景,根因其实只有一个
java·spring·ai编程
beijixinghe2 小时前
第15节 指针作为函数参数的工程实战用法
开发语言·c++·c++基础·c++入门·几何引擎c++
梦想平凡2 小时前
情怀棋牌源代码焕新记录(一):全新国风UI与原版工程梳理
java·服务器·数据库·websocket·网络协议·cocos2d
SEO_juper2 小时前
2026年用Python分析网站访问日志:看清Googlebot和AI爬虫怎么爬你的站(附完整代码)
开发语言·前端·seo·独立站·谷歌优化
ba_pi3 小时前
springAI2.0接入mcp读取mysql
java·agent·spring ai