客户端代码:
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();
}
}
}
}

利用多线程与网络编程编写的实时聊天小程序相关推荐

  1. 利用多线程实现linux下C语言的聊天室程序:

    转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...

  2. windows多线程和网络编程

    第 10 章  多线程与网络编程初步  教学提示:Windows 是一个支持多任务的操作系统.当在一个程序中需要启动另外一 个程序时,需要用到多进程的编程方式.如果一个进程中有一些相似的任务需要同时推 ...

  3. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  4. 第25天多线程、网络编程

    多线程.网络编程 JDK5的锁和等待唤醒 Lock接口介绍 在JDK5之前,同步和锁绑定在一起,同时锁和等待唤醒也绑定在一起.在前学习同步代码块或同步方法的时候,线程要进入同步首先需要隐式的获取同步上 ...

  5. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

  6. 笔记整理5----Java语言高级(五--完结)21 字符流与字节流+22 多线程+23 网络编程

    21 字符流与字节流+22 多线程+23 网络编程 第10天 IO流 今日内容介绍  标准输入流 & 转换流 & 打印流  对象操作流  Properties集合 第1章标准输入 ...

  7. Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)

    原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...

  8. Java多线程与网络编程综合使用

    处理多线程与网络编程最为经典的例子莫过于聊天室,那我就聊天室案例作为一个回顾. 首先,我们来看以下代码: package MultiTCP;import java.io.DataOutputStrea ...

  9. Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)

    Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...

最新文章

  1. MySQL排序优化(两次排序和单次排序)
  2. 基于.net平台remoting、DB2技术的大型分布式HIS系统架构及开发(项目架构师方向)...
  3. 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)
  4. [unity3d]手游资源热更新策略探讨
  5. python写脚本入门-学习Python的教程?:python 脚本菜鸟教程
  6. VSCode自定义代码片段3——url大全
  7. Android代码优化,主界面卡住
  8. 推荐一款思维在线思维导图,为什么?
  9. 【写作技巧】绪论写作要点
  10. Java占Linux超过xms,linux下分析java程序占用CPU、内存过高
  11. python数据库操作——连接Oracle
  12. DateFormat与SimpleDateFormat区别和使用详解
  13. npm和yarn科学设置淘宝镜像
  14. EL表达式和JSTL介绍
  15. 文本数据标注工具Doccano
  16. 小程序电子名片 制作
  17. 我用Python爬虫获取数据,分析双色球中奖概率,差点就中了
  18. 萨缪尔·莫尔斯,一个种族主义画家是如何窃取了电报发明权的呢?
  19. 例题6-21 uva506 System Dependencies 模拟
  20. 学习 CommandName 和 CommandArgument

热门文章

  1. python绘制五角星
  2. go io 包的使用(TeeReader, MultiReader, MultiWriter, Pipe)
  3. 宿主机和docker容器之间的文件拷贝
  4. macos 升级到 Big Sur 虚拟机的鼠标能动但不能点击
  5. 微圈社群助手到底是什么?怎么用?
  6. Python基础篇(九)-- 正则表达式
  7. POJ-3311 Hie with the Pie
  8. 三、vue3--生命周期、Hook函数、 toRef和toRefs、其他的组合式API
  9. mysql3306端口被占用无法终止_Mysql3306端口被占用无法启动解决办法
  10. 计算广告小窥[中]这孙子怎么什么都知道