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

}

}

}

三、运行结果

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

相关推荐
艾上编程1 分钟前
《Python实战小课:爬虫工具场景——开启数据抓取之旅》导读
开发语言·爬虫·python
小单于PRO2 分钟前
Spring Boot 实现构建一个轻量级地图瓦片服务
java·spring boot·后端
Selegant4 分钟前
Spring Boot 3 + Java 21 全新特性实战:虚拟线程、结构化并发与 Record 类型
java·spring boot·后端
再__努力1点24 分钟前
【68】颜色直方图详解与Python实现
开发语言·图像处理·人工智能·python·算法·计算机视觉
Jinkxs30 分钟前
Java 架构 02:DDD 领域模型设计实战(限界上下文划分)
java·开发语言·架构
百锦再33 分钟前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
IT199536 分钟前
C++使用“长度前缀法”解决TCP“粘包 / 拆包”问题
服务器·网络·c++·tcp/ip
爱笑的眼睛1142 分钟前
文本分类的范式演进:从统计概率到语言模型提示工程
java·人工智能·python·ai
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于PHP的家常菜谱教程网站为例,包含答辩的问题和答案
开发语言·php
周杰伦_Jay1 小时前
【Go/Python/Java】基础语法+核心特性对比
java·python·golang