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编程简单实现一个消息群发功能相关推荐

  1. java服务器修改缓存数据,java监控服务器数据存入缓存

    java监控服务器数据存入缓存 内容精选 换一换 本节定义了云数据库GaussDB(for MySQL)上报云监控的监控指标的命名空间,监控指标列表和维度定义,用户可以通过云监控提供的API接口来检索 ...

  2. 消息队列(1):一个消息队列应该有的特点

    消息队列常见场景 异步解耦 削峰填谷 日志收集分析 代替事务,最终一致 消息队列特点 消息队列之所以能异步,就是因为消息并不是实时处理的,那肯定会有一个存储消息,处理消息的地方,才能达到异步效果. 所 ...

  3. java 仿qq 传文件_java网络编程实现QQ发消息文件,图片等内容

    前言:昨天我们已经初步学习了网络编程到底是怎么一回事儿,今天在此基础上继续学习网络编程,利用网络编程实现 QQ上的发送消息,群聊,私聊等功能. 首先我们来回顾一下昨天的两点基础知识: 1.建立服务器端 ...

  4. java服务器与客户端项目,Java项目中用于服务器和客户端软件包的共...

    I use eclipse and have put everything in a single java project, each section server,client and libra ...

  5. java服务器http post_使用Java程序通过http post访问ABAP Netweaver服务器

    Created by Jerry Wang, last modified on Aug 20, 2014 source code如下: import java.io.FileNotFoundExcep ...

  6. java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...

    我正在使用某些应用程序的API下载文档. 问题是,当我尝试解析inputStream时,它将引发响应代码409异常. 但是最大的问题是它有时会抛出此异常. 此异常的原因是什么? 这是我的代码: URL ...

  7. java 服务器读取客户端文件,java 服务器读取客户端文件

    弹性云服务器 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取.可弹性伸缩的云服务器,帮助用户打造可靠.安全.灵活.高效的应用环境,确保服务持久稳定运行,提升运维效 ...

  8. java 关闭按钮监听_Java事件处理(1)——实现简单的事件监听功能

    假设我们已经建立了一个窗体,并且添加了一个按钮组件. 例:模拟登录界面 1 import javax.swing.*;2 import java.awt.*;3 4 public class Logi ...

  9. VC6.0实现网络编程弹出一个消息框

    代码如下: #include <windows.h> INT WINAPI wWinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPWSTR IpCm ...

最新文章

  1. bootstrap与360浏览器不兼容问题
  2. C#-发送接收消息MQ
  3. LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告
  4. POJ 3481 Double Queue
  5. Python __all__
  6. PHP __compare 魔术方法的实现
  7. 【nginx配置】 proxy_pass反向代理配置中url后面加不加/的说明
  8. Mongodb中$inc自增,自减的操作
  9. SAP Cloud for Customer里的HTML Mashup的JavaScript编程功能
  10. Python中的getpass模块
  11. mysql查询各类课程的总学分_基于jsp+mysql的JSP学生选课信息管理系统
  12. Mina网络通信框架
  13. c# webapi返回html,c#-从Web API 2端点返回自定义HTTP状态代码
  14. 使用Newtonsoft.Json格式化JSON文档
  15. 变压器绕制工艺之分布电容
  16. 忘记安卓密码?教您轻松破解锁屏密码,解锁手机,简单易操作
  17. 《网络攻防》Web基础
  18. 查询rssi指令_h3c无线控制器常用命令(wx)
  19. 【分布式】关于分布式“一致性”的讨论
  20. Linux 内存映射之文件映射

热门文章

  1. 微软捕获中国黑客刘蝶雨的故事
  2. 嵌入式系统测试平台——ETest
  3. <代码自动化>, 之c/c++代码扫描器
  4. VGA、HDMI、DP你都懂吗?显示接口大盘点
  5. docker配置加速器,快速拉取镜像
  6. 【生成对抗网络 论文泛读】……pix2pix pix2pixhd……
  7. 上位机程序,上位机界面开发,ATECLOUD中国人自己的LabVIEW
  8. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)
  9. 【金猿产品展】Smartbi一站式大数据分析平台——一个平台、所有数据、无限可能。...
  10. 力扣-718最长重复子数组(dp)