服务器端代码

 import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList; public class Server { private static ArrayList<Socket> list = new ArrayList<Socket>();
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
while(true){
Socket socket = server.accept();
list.add(socket);
new ServerThread(socket,list).start();;
} } }

客户端代码

 import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException; public class Client { public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",9999);
new ThreadWriter(socket).start();
new ThreadReader(socket).start();
} }

服务器处理socket的多线程

 import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList; public class ServerThread extends Thread { Socket socket;
ArrayList<Socket> list;
InputStream is;
OutputStream os;
public ServerThread(Socket socket, ArrayList<Socket> list) {
this.socket = socket;
this.list = list;
} @Override
public void run() {
try {
while(true){
is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
String str = new String(b,0,len);
System.out.println(str);
for(Socket socket:list){
os = socket.getOutputStream();
os.write(str.getBytes());
}
} } catch (IOException e) {
e.printStackTrace();
}
} }

读取客户端输入流多线程代码

 import java.io.IOException;
import java.io.InputStream;
import java.net.Socket; public class ThreadReader extends Thread { Socket socket;
public ThreadReader(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try {
while(true){ InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
String str = new String(b,0,len);
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

客户端发送数据多线程代码

 import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner; public class ThreadWriter extends Thread { Socket socket;
public ThreadWriter(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try {
Scanner sc = new Scanner(System.in);
while(true){
String str = sc.next();
OutputStream os = socket.getOutputStream();
os.write(str.getBytes());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

Java多线程Socket在控制台输出的多人聊天室编程的更多相关文章

  1. 多人聊天室(Java)

    第1部分 TCP和UDP TCP:是一种可靠地传输协议,是把消息按一个个小包传递并确认消息接收成功和正确才发送下一个包,速度相对于UDP慢,但是信息准确安全:常用于一般不要求速度和需要准确发送消息的场 ...

  2. Java多线程 Socket使用

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  3. Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...

  4. Java Socket聊天室编程(一)之利用socket实现聊天之消息推送

    这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...

  5. java socket之多人聊天室Demo

    一.功能介绍 该功能实现了一个类似QQ的最简单多人聊天室,如下图所示. 二.目录结构 三.服务端 1)SocketServer类,该类是服务端的主类,主要负责创建聊天窗口,创建监听客户端的线程: pa ...

  6. java小程序---简陋版多人聊天室

    功能需求: 1 每运行一次主函数,创建一个客户端聊天界面; 2 客户端界面分三块,公屏(显示所有客户端发送的信息),私屏(用于输入个人想要发送的信息),发送按钮(点击一次,将客户端信息发送到服务端) ...

  7. 66 网络编程(五)——TCP多线程实现多人聊天室

    思路 客户端读写各一个类,可以使内部类,实现Runnable.读写类都与服务器端建立连接,一个收,一个发. 客户端实现接收和转发.多线程实现每个客户端的连接(使与各客户端的连接独立). 服务器端中创建 ...

  8. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  9. 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

    原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

随机推荐

  1. 注册Com组件..

    开发一些第三方的接口或者功能时..有时会需要接入对方提供Com组件..是一个dll文件.. 这个文件会在你的程序中引用.. 比如一个CMBChina.dll文件..这是招商银行的支付开发时必备的.. ...

  2. android-解决EditText的inputType为Password时, 字体不一致的问题

    今天做项目的时候,发现当edittext 的InputType为password时,它的字体和原来不一样: 网上找了一下,给出了解决办法: 第一: 去掉xml文件中的password配置,在代码中编写 ...

  3. [MongoDB]增删改查

    摘要 上篇文章学习了mongodb在windows上的安装,以及如何开启mongodb,最后列举了简单的增删改查操作.本篇将继续深入学习一下增删改查. 相关文章 [MongoDB]入门操作 CRUD ...

  4. angularjs DOM操作之jqLite篇

    angular.element(el).find("input").attr({value:1}); * ## Angular's jqLite * jqLite provides ...

  5. 基础知识系列☞MSSQL→约束

    遇到一个数据库设计很渣的系统··· 本来一个约束就能解决的问题·以前建库的时候也不设计好···

  6. 【Solr】 solr对拼音搜索和拼音首字母搜索的支持

    问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段 ...

  7. php连接mysql

    一.php连接mysql的函数 1.mysql_connect 作用:连接mysql eg:$con=mysql_connect('localhost','root','123456'); 2.mys ...

  8. Windows 7 共享文件夹 给 VirtualBox 中的 Ubuntu 14

    操作步骤如下: 1.打开虚拟机中的 Ubuntu 系统: 2.安装“增强工具” 设备 -> 安装增强工具 3.设置“共享文件夹” 控制 -> 设置 -> 添加共享文件夹 ->  ...

  9. 架设WEBIM

    使用openfire+jwchat构建. Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理 ...

  10. objc/runtime

    "T@\"MyInnerObject\",&,N,V_myInnerObject" MyInnerObject "Td,N,V_cgfloat ...