打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
服务器端应用程序
package day05;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

/**
 * 服务器端应用程序
 * @author Administrator
 *
 */
public class Server {
private ServerSocket server;
/**
* 创建一个集合,用于保存所有客户端的输出流
* 这样就可以通过遍历该集合拿到所有用户的
* 输出流,做到转发操作
*/
Vector<PrintWriter> allOut = new Vector<PrintWriter>();
/**
* 将一个客户端的输出流存入共享集合
* @param writer
*/
public void addOut(PrintWriter writer){
allOut.add(writer);
}
/**
* 将给定的信息发送给所有的客户端
* @param message
*/
public void sendMessageToAllClient(String message){
/**
* 遍历每个客户端的输出流,将给定的信息发送给
* 每一个用户
*/
for(PrintWriter writer : allOut){
writer.println(message);
}
}
public Server(){
try {
server = new ServerSocket(8088);
} catch (Exception e) {
System.out.println("服务器启动失败");
e.printStackTrace();
}
}
/**
* 开始处理与客户端的通信
*/
public void start(){
try {
/**
* 2监听8088端口,等待客户端的链接
*  返回刚刚链接的客户端Socket
*/
System.out.println("服务器启动了,等待客户端连接...");
while(true){
Socket socket = server.accept();
System.out.println("一个客户端连接了");
/**
* 当一个客户端连接后,将该客户端Socket交给线程
* 让线程去循环读取客户端发送的信息
*/
GetClientInfoHandler handler = 
new GetClientInfoHandler(socket);
Thread t = new Thread(handler);
t.start();
}
/**
* 服务端创建一个输出流,用于给这个客户端发送信息
*/
// OutputStream out = socket.getOutputStream();
// PrintWriter pw = new PrintWriter(out,true);
// pw.println("你好啊!客户端");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 服务端的内部类
* 用于获取一个客户端发送的信息
* 每一个线程负责和一个客户端交流
* @author Administrator
*
*/
private class GetClientInfoHandler implements Runnable{
/**
* 当前线程要接收的客户端的Socket
*/
private Socket client;
/**
* 将指定的客户端Socket传入
* @param client
*/
public GetClientInfoHandler(Socket client){
this.client = client;
}
public void run() {
try{
/**
* 将开客户端的输出流存入共享数组
*/
PrintWriter writer = 
new PrintWriter(client.getOutputStream(),true);
addOut(writer);
/**
* 在线程中,我们通过客户端的Socket获取输入流
* 循环读取该客户端发送过来的信息
*/
BufferedReader reader = 
new BufferedReader(
new InputStreamReader(
client.getInputStream()
)
);
String str = null;
while(true){
str = reader.readLine();
// System.out.println("客户端说:"+str);
sendMessageToAllClient(str);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args)throws Exception {
//实例化服务器端实例
Server server = new Server();
server.start();
}
}






本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
浅出Java Socket 编程
一篇不错的介绍Java Socket编程的文章3 — IT技术
面向套接字(Socket)Java编程(单线程+多线程)
JAVA printWriter中write()和println()区别
Socket通道续3---io框架模型演化
JavaEE-网络编程-TCP流套接字编程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服