TCP协议实现一对一聊天

服务端代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;/*** 发送消息线程*/
class Send extends Thread{private Socket socket;public Send(Socket socket){this.socket  =socket;}@Overridepublic void run() {this.sendMsy();}/*** 发送消息*/private void sendMsy(){Scanner scanner =null;PrintWriter pw =null;try{scanner =new Scanner(System.in);pw =new PrintWriter(this.socket.getOutputStream());while(true){String str =scanner.nextLine();pw.println(str);pw.flush();}}catch (Exception e){e.printStackTrace();}finally {if (scanner!=null){scanner.close();}if (pw!=null){pw.close();}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}/*** 接收消息的线程*/
class receive extends Thread{private Socket socket=null;public receive(Socket socket){this.socket =socket;}@Overridepublic void run() {this.receiveMsg();}/*** 用于接收对方消息*/private void receiveMsg(){BufferedReader br =null;try{br =new BufferedReader(new InputStreamReader(this.socket.getInputStream()));while(true){String mr = br.readLine();System.out.println("A说:"+mr);}}catch (Exception e){e.printStackTrace();}finally {if (br!=null){try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
}public class ChatSocketServer {public static void main(String[] args) {ServerSocket serverSocket =null;try{serverSocket =new ServerSocket(8888);System.out.println("服务端已启动等待连接");Socket socket = serverSocket.accept();System.out.println("连接成功!");new Send(socket).start();new receive(socket).start();}catch(Exception e){e.printStackTrace();}finally {if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

客户端代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class ChatSocketClient {public static void main(String[] args) {try {Socket socket =new Socket("127.0.0.1",8888);System.out.println("连接成功!");new ClientSend(socket).start();new Clientreive(socket).start();} catch (IOException e) {e.printStackTrace();}}
}
/*** 用于发送消息线程类*/
class ClientSend extends Thread{@Overridepublic void run() {this.sendMsy();}private Socket socket;public ClientSend(Socket socket){this.socket  =socket;}/*** 发送消息*/private void sendMsy(){Scanner scanner =null;PrintWriter pw =null;try{scanner =new Scanner(System.in);pw =new PrintWriter(this.socket.getOutputStream());while(true){String str =scanner.nextLine();pw.println(str);pw.flush();}}catch (Exception e){e.printStackTrace();}finally {if (scanner!=null){scanner.close();}if (pw!=null){pw.close();}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}/***用于接收消息线程类*/
class Clientreive extends Thread{private Socket socket=null;public Clientreive(Socket socket){this.socket =socket;}@Overridepublic void run() {this.receiveMsg();}/*** 用于接收对方消息*/private void receiveMsg(){BufferedReader br =null;try{br =new BufferedReader(new InputStreamReader(this.socket.getInputStream()));while(true){String mr = br.readLine();System.out.println("B说:"+mr);}}catch (Exception e){e.printStackTrace();}finally {if (br!=null){try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
}

运行服务端代码后,再运行客户端代码,即可实现一对一聊天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/211496.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scrapy爬虫数据存储为JSON文件的解决方案

什么是JSON文件 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成。它基于JavaScript Spark语言的一个子集,但独立于Smashing语言,因此在许多中…

实战oj题——设计循环队列

前言:今天我们来实现循环队列。 各个接口的实现 创建队列: typedef struct {int* a;int front;int back;int k;} MyCircularQueue;我们的队列是由数组储存的,所以我们队列中得定义一个数组,front代表我们的首元素,ba…

解决:spring boot+mybatis进行增删改查的时候,接收到前端数据,并且执行成功了,但是数据库里面添加的内容都是空值

在写spring boot整合mybatis的时候,我在Apifox里面测试,数据也传递过去了,后端服务器也接收到了参数,就是数据库里面添加的都是空值??? 前端接收到了数据,并且没有报错 Apifox里面也…

陪诊系统:基于自然语言处理的患者沟通创新

医疗领域的数字化转型正日益引入创新技术,其中基于自然语言处理(NLP)的陪诊系统成为提升患者沟通的一项关键技术。本文将深入研究这一领域,介绍陪诊系统如何借助NLP实现患者沟通的创新,并提供一个简单的Python代码示例…

Leetcode—383.赎金信【简单】

2023每日刷题(五十) Leetcode—383.赎金信 实现代码 class Solution { public:int arr[26] {0};int arr2[26] {0};bool canConstruct(string ransomNote, string magazine) {int len ransomNote.size();int len2 magazine.size();for(int i 0; i …

西南科技大学模拟电子技术实验三(BJT单管共射放大电路测试)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 二、画出并填写实验指导书上…

网络安全威胁——跨站脚本攻击

跨站脚本攻击 1. 定义2. 跨站脚本攻击如何工作3. 跨站脚本攻击类型4. 如何防止跨站脚本攻击 1. 定义 跨站脚本攻击(Cross-site Scripting,通常称为XSS),是一种典型的Web程序漏洞利用攻击,在线论坛、博客、留言板等共享…

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

一、创建新项目 首先创建一个新的项目,并命名。 二、实现代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String; public class liaotian extends JFrame{ pri…

今日现货黄金最新建议

近期现货黄金价格再度逼近历史高位,很多本来在场外观望的投资者,都纷纷希望进场一试身手。然而大涨大跌的行情并不是很适合新手投资者参与,如果大家还没做好技术上的准备,可以多听听正规交易平台的专业人士的意见。 在正式入市之前…

LLM大语言模型(一):ChatGLM3-6B本地部署

目录 前言 本机环境 ChatGLM3代码库下载 模型文件下载 修改为从本地模型文件启动 启动模型网页版对话demo 超参数设置 GPU资源使用情况 (网页对话非常流畅) 前言 LLM大语言模型工程化,在本地搭建一套开源的LLM,方便后续的…

【MATLAB】SSA+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 SSAFFTHHT组合算法是一种基于奇异谱分析(SSA)、快速傅里叶变换(FFT)和希尔伯特-黄变换(HHT)的组合算法。 其中&am…

搭梯子之后电脑连接WIFI打不开浏览器网页:远程计算机或者设备不接受连接

问题描述: 打不开网页,但是能正常使用微信等app windows网络诊断: 远程计算机或者设备不接受连接 解决办法: 电脑搜索【internet选项】 进入连接,点击局域网设置,将里面的代理服务器选项关掉就可以正常打开…

西南科技大学模拟电子技术实验五(集成运算放大器的应用设计)预习报告

一、计算/设计过程 设计一:用集成运放设计一个输入为0.05v,放大为-100的反相比例运算电路。 对于理想电路,反相比例运算电路的输出电压与输入电压之间的关系如下: =-100,所以 =100 若是假定R1为100k,则R2= =1k 为了减小输入级偏置电流引起的运算误差,在同相输入端…

103.进程概述

目录 1.并行和并发 区别: 2.PCB 3.进程状态 4. 进程命令 从严格意义上来讲,程序和进程是两个不同的概念,他们的状态,占用的系统资源都是不同的。 程序:程序是一种静态实体,是存储在计算机存储介质上的…

Android Glide自定义AppCompatImageView切分成若干小格子,每个小格子onDraw绘制Bitmap,Kotlin(1)

Android Glide自定义AppCompatImageView切分成若干小格子,每个小格子onDraw绘制Bitmap,Kotlin(1) 垂直方向的RecyclerView,每行一个AppCompatImageView,每个AppCompatImageView被均匀切割成n个小格子&#…

提高工厂能源效率的关键:工厂能耗监测平台

工业做为能源消耗的重要场所,所以节能减排对工业来讲是一个亟需解决的问题。除了对设备进行更新换代外,还需要能源管理消耗监测平台,帮助企业实现节能减排的目标。 工厂能源消费量非常庞大,能源比较难以监测与控制。传统能源的管…

P6 Linux 系统中的文件类型

目录 前言 ​编辑 01 linux系统查看文件类型 02 普通文件 - 03 目录文件 d 04 字符设备文件 c 和块设备文件 b 05 符号链接文件 l 06 管道文件 p 07 套接字文件 s 总结 前言 🎬 个人…

Python+requests+unittest执行接口自动化测试详情

1、安装requests、xlrd、json、unittest库 <1>pip 命令安装&#xff1a; pip install requests pip install xlrd pip install json pip install unittest 2、创建六类Python Package 利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施)…

Linux环境变量与命令行参数

Linux环境变量与命令行参数 一.命令行参数1.语法2.应用1:简易计算器 二.环境变量1.环境变量的概念2.环境变量的作用3.进一步理解环境变量的作用4.常见环境变量5.导出环境变量(添加环境变量)6.环境变量的特性7.另一种获取环境变量的方式8.小功能:用于身份验证的代码9.补充:第三种…

Android--Jetpack--Lifecycle详解

富贵本无根&#xff0c;尽从勤里得 一&#xff0c;定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件&#xff08;Activity/Fragment&#xff09;生命周期状态信息&#xff0c;并且允许其观察者监听宿主生命周期状态变化。 顾名思义&#xff0c;Lifecycle的主…