Java基于socket实现简易聊天室实例
作者:wo_soul 发布时间:2021-10-30 00:24:56
标签:Java,socket,聊天室
本文实例讲述了Java基于socket实现简易聊天室的方法。分享给大家供大家参考。具体实现方法如下:
chatroomdemo.java
package com.socket.demo;
import java.io.IOException;
import java.net.DatagramSocket;
public class ChatRoomDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("----进入聊天室----");
DatagramSocket send = new DatagramSocket();
DatagramSocket rece = new DatagramSocket(10001);
new Thread(new SendDemo(send)).start();// 启动发送端线程
new Thread(new ReceiveDemo(rece)).start();// 启动接收端线程
}
}
SendDemo.java
package com.socket.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo implements Runnable {
private DatagramSocket ds;
// 有参数构造函数
public SendDemo(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
try {
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
while ((line = bufr.readLine()) != null) {
byte[] buf = line.getBytes();
/*
* //192.168.1.255是ip段广播地址,发给这个IP的信息,
* 在192.168.1.1-192.168.1.255的ip段的所有IP地址都能收到消息
*/
DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.255"), 10001);
ds.send(dp);
if ("886".equals(line))
break;
}
ds.close();
} catch (Exception e) {
}
}
}
ReceiveDemo.java
package com.socket.demo;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveDemo implements Runnable {
private DatagramSocket ds;
public ReceiveDemo(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
try {
while (true) {
// 2,创建数据包。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3,使用接收方法将数据存储到数据包中。
ds.receive(dp);// 阻塞式的。
// 4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
System.out.println("----port-----" + port);
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + "::" + text);
if (text.equals("886")) {
System.out.println(ip + "....退出聊天室");
}
}
} catch (Exception e) {
}
}
}
运行效果图如下:
希望本文所述对大家的java程序设计有所帮助。


猜你喜欢
- 对不起大家,昨天文章里的告别说早了,这个系列还不能就这么结束。我们前面的文章中讲解过RabbitMQ的用法,所谓MQ就是一种发布订阅模式的消
- 问题描述springcloud项目部署或调试时,占用的内存特别多。当部署到服务器上去后,有可能导致服务器内存占用过多而崩溃。解决方案&nbs
- 上一篇简单介绍了SurfaceView的基本使用,这次就介绍SurfaceView与多线程的混搭。SurfaceView与多线程混搭,是为了
- 23种设计模式第十二篇:java模版方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义
- Filter过滤器中访问getSession()要进行转化public void doFilter(ServletRequest reque
- 现在Android智能手机的像素都会提供照相的功能,大部分的手机的摄像头的像素都在1000万以上的像素,有的甚至会更高。它们大多都会支持光学
- feign传输List的坑无法直接传输List错误方法1@RequestMapping(value = "/stat/mercha
- 1.方法重写子类写和父类一样的方法定义public void call(){System.out.println(“输出文字”); //父类
- 作为java中的一个重要理念,说起面向对象也是老生常谈了。在找资料的时候多是很专业的术语,又或者很多框架的知识点合集,其实大部分人刚看资料的
- 一、前言本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,
- 本文实例为大家分享了C语言实现中国象棋的具体代码,供大家参考,具体内容如下运行截图实现思路老套路,二维数组存储棋盘,宏定义各种棋子,每次棋子
- 目录项目结构:1.pom引入mongodb依赖2 配置application.properties3.创建mongodb文档映射实体类Spr
- java 中模式匹配算法-KMP算法实例详解朴素模式匹配算法的最大问题就是太低效了。于是三位前辈发表了一种KMP算法,其中三个字母分别是这三
- 本文实例为大家分享了Java分页展示的具体代码,供大家参考,具体内容如下先上图吧,大致如图,也就提供个思路(ps:使用了SSH框架) 前台J
- 前言好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf
- springboot 2.0 mybatis mapper-locations扫描多个路径mapper-locations扫描多个路径,中间
- 本文实例讲述了C#实现百分比转小数的方法。分享给大家供大家参考。具体分析如下:近日需要用到百分比转小数功能,而且百分比是字符串格式(可以带或
- 定义注解也叫原数据,它是JDK1.5及之后版本引入的一个特性,它可以声明在类、方法、变量等前面,用来对这些元素进行说明。作用生成文档:通过代
- 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找。对于依赖的包大家可以从
- 一.什么是maven?Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一