利用多线程与网络编程编写的实时聊天小程序
客户端代码:
package Oracle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class ClientThread {
static Socket socket = null;
public static void main(String[] args) throws Exception {
socket = new Socket("192.168.3.59", 10002);
System.out.println("客户端已启动...");
ClientSent cs = new ClientSent();
Thread t1 = new Thread(cs);
t1.start();
ClientReceive cr = new ClientReceive();
Thread t2 = new Thread(cr);
t2.start();
}
}
class ClientSent extends ClientThread implements Runnable {
public void run() {
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintStream ps;
try {
ps = new PrintStream(socket.getOutputStream(), true);
String str = null;
str = br.readLine();
ps.println(str);
if ("exit".equals(str)) {
System.out.println("已退出");
System.exit(-1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class ClientReceive extends ClientThread implements Runnable {
public void run() {
while (true) {
BufferedReader br2;
try {
br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str2 = null;
str2 = br2.readLine();
if ("exit".equals(str2)) {
System.out.println("对方退出聊天");
System.exit(-1);
}
System.out.println(socket.getInetAddress().getHostName() + "说:" + str2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务端代码:
package Oracle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerThread {
static ServerSocket ss;
static Socket s;
public static void main(String[] args) throws IOException {
ss = new ServerSocket(10002);
System.out.println("服务端已启动...");
s = ss.accept();
String name = s.getInetAddress().getHostName();
System.out.println(name + ":已连接");
ServerSend ss = new ServerSend();
Thread t1 = new Thread(ss);
t1.start();
ServerReceive sr = new ServerReceive();
Thread t2 = new Thread(sr);
t2.start();
}
}
class ServerSend extends ServerThread implements Runnable {
public void run() {
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintStream ps;
try {
ps = new PrintStream(s.getOutputStream(), true);
String str = null;
str = br.readLine();
ps.println(str);
if ("exit".equals(str)) {
System.out.println("已退出");
System.exit(-1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class ServerReceive extends ServerThread implements Runnable {
public void run() {
while (true) {
try {
BufferedReader br2 = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str2 = null;
str2 = br2.readLine();
System.out.println(s.getInetAddress().getHostName() + "说:" + str2);
if ("exit".equals(str2)) {
System.out.println("对方退出聊天");
System.exit(-1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
利用多线程与网络编程编写的实时聊天小程序相关推荐
- 利用多线程实现linux下C语言的聊天室程序:
转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...
- windows多线程和网络编程
第 10 章 多线程与网络编程初步 教学提示:Windows 是一个支持多任务的操作系统.当在一个程序中需要启动另外一 个程序时,需要用到多进程的编程方式.如果一个进程中有一些相似的任务需要同时推 ...
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- 第25天多线程、网络编程
多线程.网络编程 JDK5的锁和等待唤醒 Lock接口介绍 在JDK5之前,同步和锁绑定在一起,同时锁和等待唤醒也绑定在一起.在前学习同步代码块或同步方法的时候,线程要进入同步首先需要隐式的获取同步上 ...
- android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术
本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...
- 笔记整理5----Java语言高级(五--完结)21 字符流与字节流+22 多线程+23 网络编程
21 字符流与字节流+22 多线程+23 网络编程 第10天 IO流 今日内容介绍 标准输入流 & 转换流 & 打印流 对象操作流 Properties集合 第1章标准输入 ...
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)
原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...
- Java多线程与网络编程综合使用
处理多线程与网络编程最为经典的例子莫过于聊天室,那我就聊天室案例作为一个回顾. 首先,我们来看以下代码: package MultiTCP;import java.io.DataOutputStrea ...
- Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)
Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...
最新文章
- MySQL排序优化(两次排序和单次排序)
- 基于.net平台remoting、DB2技术的大型分布式HIS系统架构及开发(项目架构师方向)...
- 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)
- [unity3d]手游资源热更新策略探讨
- python写脚本入门-学习Python的教程?:python 脚本菜鸟教程
- VSCode自定义代码片段3——url大全
- Android代码优化,主界面卡住
- 推荐一款思维在线思维导图,为什么?
- 【写作技巧】绪论写作要点
- Java占Linux超过xms,linux下分析java程序占用CPU、内存过高
- python数据库操作——连接Oracle
- DateFormat与SimpleDateFormat区别和使用详解
- npm和yarn科学设置淘宝镜像
- EL表达式和JSTL介绍
- 文本数据标注工具Doccano
- 小程序电子名片 制作
- 我用Python爬虫获取数据,分析双色球中奖概率,差点就中了
- 萨缪尔·莫尔斯,一个种族主义画家是如何窃取了电报发明权的呢?
- 例题6-21 uva506 System Dependencies 模拟
- 学习 CommandName 和 CommandArgument
热门文章
- python绘制五角星
- go io 包的使用(TeeReader, MultiReader, MultiWriter, Pipe)
- 宿主机和docker容器之间的文件拷贝
- macos 升级到 Big Sur 虚拟机的鼠标能动但不能点击
- 微圈社群助手到底是什么?怎么用?
- Python基础篇(九)-- 正则表达式
- POJ-3311 Hie with the Pie
- 三、vue3--生命周期、Hook函数、 toRef和toRefs、其他的组合式API
- mysql3306端口被占用无法终止_Mysql3306端口被占用无法启动解决办法
- 计算广告小窥[中]这孙子怎么什么都知道