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

服务端

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. 湖南大学ACM程序设计新生杯大赛(同步赛)I - Piglet treasure hunt Series 1

    题目描述 Once there was a pig, which was very fond of treasure hunting. The treasure hunt is risky, and ...

  2. C51中的xdata

    今天在写公司芯片对应的.H文件时,在定义寄存器的时候出现一个问题. 我们芯片的寄存器地址是定义在片外RAM区的,不能使用sfr这样的关键字来进行定义. 后来查阅了对应的资料才发现定义寄存器有很多种方法 ...

  3. Jquery操作select标签的常用方法

    <select id="search"> <option value='1'>baidu</option> <option value=' ...

  4. Unity 游戏开发技巧集锦之材质的应用的创建反射材质

    Unity 游戏开发技巧集锦之材质的应用的创建反射材质 Unity中材质的应用 游戏中,大多数材质的应用都离不开纹理,而纹理本身是图片.所以,在学习本章时,最好在电脑上安装一个可以编辑图片的功能强大的 ...

  5. SPOJ694 DISUBSTR --- 后缀数组 / 后缀自动机

    SPOJ694 DISUBSTR 题目描述: Given a string, we need to find the total number of its distinct substrings. ...

  6. [BZOJ4627][BeiJing2016]回转寿司(线段树)

    从左到右处理,设到当前数R的前缀和为cnt[i],则以i为右端点的合法的区间左端点j必然是L<=cnt[i]-cnt[j-1]<=R,即cnt[i]-R<=cnt[j-1]<= ...

  7. 2017-2018-1 JAVA实验站 第二周作业

    2017-2018-1 JAVA实验站 第二周作业 小组成员: 组长 20162318张泰毓 成员 20162303石亚鑫 20162304张浩林 20162307张韵琪 20162321王彪 201 ...

  8. 51nod 1040 最大公约数之和 欧拉函数

    1040 最大公约数之和 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 Description 给 ...

  9. iOS 反反注入 修改__RESTRICT,__restrict工具

    通过在 Xcode 里的 Other Linker Flags 设置参数,可以防止App被注入dylib(仅限于iOS 10 以下系统)  比如,某艺,XX音乐等 dylib无法注入,也就意味着没办法 ...

  10. 开发笔记:python与随机数(转)

    这些天需要用到从一堆数中随机提取几个数,于是重新研究了下random模块. 下面介绍下random中常见的函数. 前提:需要导入random模块 >>>import random 1 ...