服务器监听、并接收每个客户端的信息再群发到每个客户端

服务端

package com.java.xiong.Net17;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket; public class RunableSocket implements Runnable {
// 定义当前线程处理的Socket
private Socket socket = null;
// 该线程对用的输入流
private BufferedReader read = null; public RunableSocket(Socket s) throws IOException {
this.socket = s;
read = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
} @Override
public void run() {
String line=null;
try{
while((line=getClentData())!=null){
for(Socket s:MyServer.list){
//向每个客户端输出信息
PrintStream print=new PrintStream(s.getOutputStream());
print.println(line);
}
} }catch(IOException io){
io.printStackTrace();
} }
//读取客户端数据的方法
public String getClentData(){
String line=null;
try{
line=read.readLine();
}catch(IOException io){
MyServer.list.remove(socket);
}
return line;
} }
package com.java.xiong.Net17;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List; public class MyServer { public static List<Socket> list=new ArrayList<Socket>(); public static void main(String [] args) throws Exception{
ServerSocket server=new ServerSocket(30001);
while(true){
Socket scoket=server.accept();
list.add(scoket);
new Thread(new RunableSocket(scoket)).start();
} } }

客户端

package com.java.xiong.Net17;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket; //将服务器返回的数据打印出来
public class RubableClient implements Runnable { private Socket socket;
private BufferedReader read; public RubableClient(Socket socket) throws IOException {
this.socket = socket;
this.read = new BufferedReader(new InputStreamReader(
this.socket.getInputStream()));
} @Override
public void run() {
try{
String line=null;
while((line=read.readLine())!=null){
System.out.print(line);
} }catch(IOException io){
io.printStackTrace();
} } }
package com.java.xiong.Net17;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException; public class MyClient { public static void main(String[] args) throws Exception, IOException { //向服务器发送请求
Socket socket = new Socket("127.0.0.1", 30001);
new Thread(new RubableClient(socket)).start();
//获取输出流
PrintStream print = new PrintStream(socket.getOutputStream());
String line = "";
BufferedReader read = new BufferedReader(new InputStreamReader(
System.in));
while((line=read.readLine())!=null){
//写入Socket对应的输出流
print.println(line);
}
} }

java socket 编程经典实例的更多相关文章

  1. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  2. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  3. Java Socket编程如何建立两者关系

    转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...

  4. 《C#并发编程经典实例》笔记

    1.前言 2.开宗明义 3.开发原则和要点 (1)并发编程概述 (2)异步编程基础 (3)并行开发的基础 (4)测试技巧 (5)集合 (6)函数式OOP (7)同步 1.前言 最近趁着项目的一段平稳期 ...

  5. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

  6. Java Socket编程(转)

    Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...

  7. 《C# 并发编程 · 经典实例》读书笔记

    前言 最近在看<C# 并发编程 · 经典实例>这本书,这不是一本理论书,反而这是一本主要讲述怎么样更好的使用好目前 C#.NET 为我们提供的这些 API 的一本书,书中绝大部分是一些实例 ...

  8. 《C#并发编程经典实例》学习笔记—2.3 报告任务

    问题 异步操作时,需要展示该操作的进度 解决方案 IProgress<T> Interface和Progress<T> Class 插一段话:读<C#并发编程经典实例&g ...

  9. [书籍]用UWP复习《C#并发编程经典实例》

    1. 简介 C#并发编程经典实例 是一本关于使用C#进行并发编程的入门参考书,使用"问题-解决方案-讨论"的模式讲解了以下这些概念: 面向异步编程的async和await 使用TP ...

随机推荐

  1. 洛谷P1558 色板游戏 [线段树]

    题目传送门 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, .. ...

  2. python笔记11-多线程之Condition(条件变量)

    前言 当小伙伴a在往火锅里面添加鱼丸,这个就是生产者行为:另外一个小伙伴b在吃掉鱼丸就是消费者行为.当火锅里面鱼丸达到一定数量加满后b才能吃,这就是一种条件判断了. 这就是本篇要讲的Condition ...

  3. property staticmathod classmethod 反射

    使用@property 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻 ...

  4. 【HDU 6021】 MG loves string (枚举+容斥原理)

    MG loves string  Accepts: 30  Submissions: 67  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  5. 【主席树】BZOJ3524-[Poi2014]Couriers

    [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. [思路 ...

  6. [HEOI2013]SAO

    题目大意: 一个有向无环图上有n个结点, 现在告诉你n-1个条件(x,y),表示x和y的先后关系. 问原图共有几种可能的拓扑序? 思路: 树形DP. f[i][j]表示对于第i个结点,有j个点在它前面 ...

  7. bzoj 2733 Splay 启发式合并,名次树

    题意:给定一个带点权的无向图,有两种操作: 1.将两个连通分量合并. 2.查询某个连通分量里的第K大点. 题解: 用并查集维护连通关系,一开始建立n棵splay树,然后不断合并,查询. 处理技巧: 1 ...

  8. Android学习笔记(三)之带有侧边索引的快速查找(跟带字母索引查找的通讯录差不多)

    喜欢另辟蹊径的我,在这里废话不多说了,直接上代码和图片了. 效果图如下: 第一步:MainActivity的代码如下: package net.loonggg.test; import java.ut ...

  9. glob函数的使用

    glob库函数用于Linux文件系统中路径名称的模式匹配,即查找文件系统中指定模式的路径.注意,这不是正则表达式匹配,虽然有些相似,但还是有点差别. glob函数原型       #include & ...

  10. Java对象引用传递探索

    一直认为自己对对象传递理解的颇为深刻,没想到最近一次的编码中,就犯下了这样的错误,令自己排查了很久才找到问题的根源, 辅以小case记录以自省. 代码如下: public class ObjRefer ...