使用Socket、SeverSocket,利用线程实现的简单的一对一聊天

websocket实现一对一聊天 基于tomcat的websocket,实现的一对一通讯,支持https协议。 立即下载

这是本人第一篇博客,Android学习已经开始一个多月了,目前还处于JAVA阶段,最近学习到了TCP/IP协议在JAVA中得实现,利用封装好的Socket、SeverSocket类实现了简单的一对一聊天 。

最开始只是利用while循环实现了一人一句的聊天,结合之前学习到的线程,把发送消息和接受消息放在不同的线程中,实现了比较自由的来聊天。

代码如下:

package talk_OneToOne;
/**

客户端代码

*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Talk_Client {
public static void main(String[] args) throws UnknownHostException, IOException {
// TODO Auto-generated method stub
Socket socket=new Socket("127.0.0.1", 8989);
//创建接收线程对象
Talk_Receive_C tr=new Talk_Receive_C(socket);
tr.start();//启动线程
//创建发送线程对象
Talk_Send_C ts=new Talk_Send_C(socket);
ts.start();//启动线程
}

//发送消息
private static class Talk_Send_C extends Thread{

private Socket socket;
public Talk_Send_C(Socket s) {
// TODO Auto-generated constructor stub
socket =s;
}
@Override
public void run() {
Scanner scanner =new Scanner(System.in);
try {
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while (true) {
bw.write(scanner.nextLine());
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**客户端一直接收消息*/
private static class Talk_Receive_C extends Thread{


private Socket socket;
public Talk_Receive_C(Socket s) {
// TODO Auto-generated constructor stub
socket=s;
}
@Override
public void run() {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
System.out.println("服务器说:"+br.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


package talk_OneToOne;
/**

服务端代码

*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Talk_Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8989);
System.out.println("服务器已经启动……");
Socket s=serverSocket.accept();
new Talk_Receive(s).start();//创建接收线程并启动
new Talk_Send(s).start();//创建发送线程并启动
}
//静态内部类继承线程类:发送信息
private static class Talk_Send extends Thread
{
private Socket socket;
public Talk_Send(Socket s) {
// TODO Auto-generated constructor stub
socket=s;
}
@Override
public void run() {
Scanner scanner=new Scanner(System.in);
try {
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while (true) {
bw.write(scanner.nextLine());
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
//接受信息
private static class Talk_Receive extends Thread
{
private Socket socket;
public Talk_Receive(Socket s) {
// TODO Auto-generated constructor stub
socket=s;
}
@Override
public void run() {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
System.out.println("客户端说:"+br.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

本代码还没有实现聊天的退出,只能通过非正常手段。

本人还是小白,欢迎大家前来指正、交流、学习

C++实现QQ聊天功能 C++实现QQ的聊天功能,实现了一对一聊天,群聊。实现文件的收发,以及把实现程序托盘隐藏。 立即下载

相关推荐

单线程一对一聊天SOCKET

这个没什么技术难度 但是对于辛苦学SOCKET的同鞋来说 好东西 关键的一点这里有说明 SICKET

基于TCP的一对一聊天项目

基于TCP的一对一聊天程序项目

m0_56910081的博客 1247

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证 文章目录前言一、工程构架二、Xilinx IP的配置1.I2S Transmitter IP配置:2.I2S Receiver IP配置:3.WM8960的配置:总结 前言 本实验基于Xilinx ZU4EV平台,也适用于ZYNQ平台。音频验证完成,记录调过程。 ①Xilinx 音频IP只支持主模式,左对齐或右对齐方式,16bit或24bit字长。 ②WM8960器件作为从模式;24bit字长;数据传输格

weixin_45637597的博客 6813

学习记录329@Java 多线程下基于TCP的一对一聊天实现

如果是单线程,聊天的发送和接收必须有顺序,为了更符合常规,采用多线程实现发送和接收数据,本文用子线程进行接收数据,主线程发送数据,这样就可以了 //接收线程 package com.dream.tcp03; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.

教练我想学编程 301

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 701

Ubuntu下NVIDIA驱动安装全攻略:从报错到完美运行nvidia-smi的完整流程

本文提供了在Ubuntu系统中安装NVIDIA驱动的完整解决方案,重点解决因驱动版本冲突、内核模块未加载或Secure Boot安全启动导致的`nvidia-smi`报错问题。通过彻底清理旧驱动、处理Secure Boot、选择兼容版本并正确安装,最终确保驱动完美运行。

weixin_29196891的博客 364

使用TCP协议和多线程实现实时聊天室

先来说说实现实时聊天室的思路: 现假设只有两个人聊天,即客户端1、客户端2和服务器。 客户端1向客户端2发送一条消息,实质上是客户端1先向服务器发送消息,然后服务器通过检测它要发送的地址,然后将消息再发送给客户端2;同样客户端2向客户端1发送消息流程也是这样。那么,如果是多人聊天,服务器只要不发送给向它发送消息的客户端,其他客户端全部发送就可以了。现在,开始详细讲解代码的实现过程:服务器端的功能

傻欣妹陀的博客 5969

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protégé Protégé[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言(关于OWL的详细介绍可参看前文2.1节内容)对知识进行表示,读者可以通过Protégé的官方网站访问Web版本或下载桌面版本。Protégé最早开发于1987年,最初目的是

qq_40503347的博客 6162

TCP服务器客户端1对1收发多线程实现支持断开、重连机制

嵌入式Linux应用过程中,使用TCP服务器连接客户端,实现1对1传输。网上找了一大堆参考资料,感觉都没有找到想要的,主要是对断开、重连没有详细的步骤,数据收发都是在单线程中完成。这里提供一种收发多线程的处理方式,支持断开、重连机制,供参考。

大牛攻城狮的专栏 3127

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 712

乐鑫WIFI芯片开发流程梳理-工具链、编译和下载

最近开始基于乐鑫ESP32的WIFI模组的软件开发,首先要做整套流程的梳理,乐鑫官网以及安信可上已经有了较为系统的资料,但是在实现过程中也遇到了一些问题,花了几天去解决,所以为了总结,也为了给其他人提供一些借鉴,把流程分享一下,官网上相对比较完善的,就不在赘述。 1. 开发方案选择 目前网上有两套较为成熟的方案: (1)基于乐鑫官网推荐的开发方式,原网页:https://docs.espress...

一名嵌入式软件工程师的自我成长 3926

(一)TCP编程-线程客户端与服务端的交流

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33910434的博客 163

如何使用CPU-Z获取内存条频率信息(编程)

当我们需要获取计算机内存条的频率信息时,可以利用CPU-Z这个工具来实现。CPU-Z是一款专门用于获取计算机硬件信息的工具,它提供了API接口,我们可以通过编程的方式来获取内存条频率信息。你可以从CPU-Z官方网站下载适用于你的操作系统的CPU-Z程序,并从安装目录中找到。函数,我们可以初始化CPU-Z,如果返回值不为0,则表示初始化失败。函数来获取内存条频率信息,如果返回值小于等于0,则表示获取失败。函数来初始化CPU-Z并获取内存条频率信息。最后,我们将获取到的内存条频率信息打印输出,并使用。

ByteProwl的博客 457

【Java笔记】TCP网络编程 ServerSocket和Socket实现多客户端聊天

目标 使用SeverSocket 和 Socket 实现双人、多人聊天 过程分析 思路 大致说一下,整体思路 1.实现一个群发效果,且需要执行判断,当前的客户端发送的信息,并不需要通过Server端发送给自己。 2.实现循环侦听,因为有多个套接字请求,所以需要将它们“存起来”。 3.根据循环侦听结果创建多个线程,每条线程都是平级关系,每条线程需要实现发送功能,读取功能(将读取到的信息发送出去) 详...

Interesting 663

ComfyUI整合包、秋叶ComfyUI、Florence节点报错下载并加载Florence2模型No module named ‘timm.layers‘、ComfyUI报错解决

步骤操作1打开2地址栏输入cmd并回车3输入命令:4安装完成后重新打开 ComfyUI,执行工作流,即可解决报错。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1242

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

基于JavaSE的简单聊天室

《一》、需求分析 一、前提:同一局域网内 二、功能: 1、注册:userName:name 2、群聊:G:message 3、私聊:P:userName-message 4、退出:byebye 三、基本模型:C/S架构 四、开发环境及工具:JDK 1.8+IDEA开发工具 五、实现原理 服务器端:           1、服务器端实例化一个SeverSocket对象,设置端口号。        ...

曾经 2512

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

多人聊天室(Java)

第1部分 TCP和UDP TCP:是一种可靠地传输协议,是把消息按一个个小包传递并确认消息接收成功和正确才发送下一个包,速度相对于UDP慢,但是信息准确安全;常用于一般不要求速度和需要准确发送消息的场合。 UDP:是一种不可靠的传输协议,常用于视频直播、游戏等及时性比较强的场景。 进行相关编程可以查询API手册。 第2部分 多人聊天室 下面是利用Java的TCP协议的API实现多人...

weixin_30894583的博客 371

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WorkPlanning_1

周工作总结及计划表 部    门 理工大学 姓    名 张进龙 入 职 时 间 3.22 本周已完成工作内容及总结 1.   java基础篇敲了前五章加第九章的代码,做了老师留的程序作业。 2.   用结合网上视频java语言写了一个简单聊天项目,学了一些项目中的知识。 3.   结合ja

323

java网络编程第一步,使用ServerSocket、Socket搭建一个聊天室

Socket又称套接字 ,套接字使用TCP提供了两台计算机之间的通信机制,客户端程序创建一个Socket,并尝试连接服务器的Socket,当连接建立时客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信,java为服务器提供了一种监听客户端并与他们建立连接的机制。聊天室本质上就是输入输出流 第一步:搭建服务端,直接上代码 ServerSocket serverSocket=new ServerSocket(8080); System.out.println("服务器等待

qq_38318330的博客 7946

聊天室系统

课程设计报告:聊天室系统 一、课程设计要求与目的 目的:编写一个小型Java聊天室系统,掌握Java网络通信、多线程、IO文件操作等高级应用编程技能。 要求:以课本第15章 Java网络通信例15.3、15.4的源代码为基础,编写一个小型Java聊天室系统。 完成如下功能: 1.多客户端模式下,实现客户与客户的单独通信,要求信息通过服务器中转 2.端到端的通信,实现并行通信模式(不再是你说一句,我...

qq_43797186的博客 1730

JavaEE初阶——Java TCP网络编程:Socket、SeverSocket API

《Java TCP网络编程深度解析》是一篇面向初学者的教程,通过通俗易懂的比喻讲解TCP编程核心概念。文章以"英译汉"服务器为例,详细解析了ServerSocket和Socket API的使用方法,并对比了TCP与UDP的区别。重点讲解了输入输出流的包装原理(如InputStream到BufferedReader的转换)、短连接与长连接的区别,以及常见错误处理(如端口占用、换行符问题)。教程采用"电话机"、"水管"等生活化比喻,帮助读者理解网络通信

道冲而用之或不盈,渊兮似万物之宗。 700

基于ServerSocket的多人聊天室模拟实现

package chatroom; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import

q2wxec的博客 691

聊天室服务端Server

package chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Print...

luckybrown 173

网络编程-TCP流套接字

短连接: 每次接收数据并返回响应后 , 都关闭连接(短连接只能收发一次数据) 长连接: 不关闭连接 , 一直保持连接状态 , 双方不停的收发数据

Node_Hao的博客 1360

socket通信:客户端与服务端建立通信之一直发牢骚的客户端

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34378767的博客 116

Java网络编程

网络编程可以让程序与网络上的其他设备中的程序进行数据交互。 实操: 端口 连接和通信数据的规则被称为网络通信协议 实操 UDP通信(服务器可收到多个客户端发的消息,但客户端之间不相通):服务端 客户端 TCP通信 TCP通信实操(服务器可收到多个客户端发的消息,但客户端之间不相通,利用线程池优化):服务端 客户端 服务器接受消息的具体实现...

qq_62767608的博客 3882
CrazyCoding123
博客等级 码龄11年 0粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值