java服务器如何群发消息,java TCP编程简单实现一个消息群发功能
client:
package com.lzs.net;
import java.io.*;
import java.net.Socket;
/**
* Created by zaish on 2016-3-20.
*/
public class MyTCPClient {
public static void main(String[] args) throws IOException {
//1 创建服务器指定服务器和端口
Socket socket=new Socket("localhost",8888);
new Thread(new Send(socket)).start();
new Thread(new Recieve(socket)).start();
}
}
class Send implements Runnable {
private BufferedReader br;
private DataOutputStream dos;
private boolean isRunning=true;
public Send(){
br=new BufferedReader(new InputStreamReader(System.in));
}
public Send(Socket socket) {
this();
try {
dos=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
isRunning=false;
CloseUtil.close(dos,br);
}
}
public void send(){
String msg=getMsgFromConsole();
if(null!=msg&&!msg.equals("")){
try {
dos.writeUTF(msg);
} catch (IOException e) {
isRunning=false;
CloseUtil.close(dos,br);
}
}
}
private String getMsgFromConsole(){
try {
return br.readLine();
} catch (IOException e) {
return "";
}
}
@Override
public void run() {
while (isRunning){
send();
}
}
}
class Recieve implements Runnable {
private BufferedWriter bw;
private DataInputStream dis;
private boolean isRunning=true;
public Recieve(){
bw=new BufferedWriter(new OutputStreamWriter(System.out));
}
public Recieve(Socket socket){
this();
try {
dis=new DataInputStream(socket.getInputStream());
} catch (IOException e) {
isRunning=false;
CloseUtil.close(dis,bw);
}
}
public void recieve(){
String msg=null;
try {
msg=dis.readUTF();
} catch (IOException e) {
isRunning=false;
CloseUtil.close(dis,bw);
}
try {
bw.write(msg);
bw.newLine();
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (isRunning){
recieve();
}
}
}
server:
package com.lzs.net;
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 java.util.List;
/**
* Created by zaish on 2016-3-20.
*/
public class MyTCPServer {
private List list=new ArrayList();
public static void main(String[] args) throws IOException {
new MyTCPServer().start();
}
private void start()throws IOException {
//1 创建服务器指定端口
ServerSocket ss=new ServerSocket(8888);
while(true){
//2 接受客户端连接,阻塞式
Socket socket=ss.accept();
System.out.println(socket.getChannel()+"建立连接");
MyChannel myChannel=new MyChannel(socket);
new Thread(myChannel).start();
list.add(myChannel);
}
}
private class MyChannel implements Runnable{
private DataInputStream dis;
private DataOutputStream dos;
private boolean isRunning=true;
public MyChannel(Socket socket){
try {
dis=new DataInputStream(socket.getInputStream());
dos=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
isRunning=false;
list.remove(this);
CloseUtil.close(dis,dos);
}
}
private String receive(){
String msg="";
try {
msg=dis.readUTF();
} catch (IOException e) {
isRunning=false;
list.remove(this);
CloseUtil.close(dis,dos);
}
return msg;
}
private void send(String msg){
if("".equals(msg)){
return;
}
try {
dos.writeUTF(msg);
dos.flush();
} catch (IOException e) {
isRunning=false;
list.remove(this);
CloseUtil.close(dis,dos);
}
}
private void sendOthers(){
String msg=receive();
for(MyChannel m:list){
if(m==this){
continue;
}else {
m.send(msg);
}
}
}
@Override
public void run() {
while (isRunning){
sendOthers();
}
}
}
}
java服务器如何群发消息,java TCP编程简单实现一个消息群发功能相关推荐
- java服务器修改缓存数据,java监控服务器数据存入缓存
java监控服务器数据存入缓存 内容精选 换一换 本节定义了云数据库GaussDB(for MySQL)上报云监控的监控指标的命名空间,监控指标列表和维度定义,用户可以通过云监控提供的API接口来检索 ...
- 消息队列(1):一个消息队列应该有的特点
消息队列常见场景 异步解耦 削峰填谷 日志收集分析 代替事务,最终一致 消息队列特点 消息队列之所以能异步,就是因为消息并不是实时处理的,那肯定会有一个存储消息,处理消息的地方,才能达到异步效果. 所 ...
- java 仿qq 传文件_java网络编程实现QQ发消息文件,图片等内容
前言:昨天我们已经初步学习了网络编程到底是怎么一回事儿,今天在此基础上继续学习网络编程,利用网络编程实现 QQ上的发送消息,群聊,私聊等功能. 首先我们来回顾一下昨天的两点基础知识: 1.建立服务器端 ...
- java服务器与客户端项目,Java项目中用于服务器和客户端软件包的共...
I use eclipse and have put everything in a single java project, each section server,client and libra ...
- java服务器http post_使用Java程序通过http post访问ABAP Netweaver服务器
Created by Jerry Wang, last modified on Aug 20, 2014 source code如下: import java.io.FileNotFoundExcep ...
- java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...
我正在使用某些应用程序的API下载文档. 问题是,当我尝试解析inputStream时,它将引发响应代码409异常. 但是最大的问题是它有时会抛出此异常. 此异常的原因是什么? 这是我的代码: URL ...
- java 服务器读取客户端文件,java 服务器读取客户端文件
弹性云服务器 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取.可弹性伸缩的云服务器,帮助用户打造可靠.安全.灵活.高效的应用环境,确保服务持久稳定运行,提升运维效 ...
- java 关闭按钮监听_Java事件处理(1)——实现简单的事件监听功能
假设我们已经建立了一个窗体,并且添加了一个按钮组件. 例:模拟登录界面 1 import javax.swing.*;2 import java.awt.*;3 4 public class Logi ...
- VC6.0实现网络编程弹出一个消息框
代码如下: #include <windows.h> INT WINAPI wWinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPWSTR IpCm ...
最新文章
- bootstrap与360浏览器不兼容问题
- C#-发送接收消息MQ
- LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告
- POJ 3481 Double Queue
- Python __all__
- PHP __compare 魔术方法的实现
- 【nginx配置】 proxy_pass反向代理配置中url后面加不加/的说明
- Mongodb中$inc自增,自减的操作
- SAP Cloud for Customer里的HTML Mashup的JavaScript编程功能
- Python中的getpass模块
- mysql查询各类课程的总学分_基于jsp+mysql的JSP学生选课信息管理系统
- Mina网络通信框架
- c# webapi返回html,c#-从Web API 2端点返回自定义HTTP状态代码
- 使用Newtonsoft.Json格式化JSON文档
- 变压器绕制工艺之分布电容
- 忘记安卓密码?教您轻松破解锁屏密码,解锁手机,简单易操作
- 《网络攻防》Web基础
- 查询rssi指令_h3c无线控制器常用命令(wx)
- 【分布式】关于分布式“一致性”的讨论
- Linux 内存映射之文件映射
热门文章
- 微软捕获中国黑客刘蝶雨的故事
- 嵌入式系统测试平台——ETest
- <代码自动化>, 之c/c++代码扫描器
- VGA、HDMI、DP你都懂吗?显示接口大盘点
- docker配置加速器,快速拉取镜像
- 【生成对抗网络 论文泛读】……pix2pix pix2pixhd……
- 上位机程序,上位机界面开发,ATECLOUD中国人自己的LabVIEW
- Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)
- 【金猿产品展】Smartbi一站式大数据分析平台——一个平台、所有数据、无限可能。...
- 力扣-718最长重复子数组(dp)