java实现服务器同时连接多客户端
———-多线程服务器:
package com.corejava;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketAddress;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
/*
This program implements a multithreaded server that listens to port 8189 and echoes back all client input.
@author Cay Horstmann
@version 1.20 2004-08-03
*/
public class ThreadedEchoServer
{
public static void main(String[] args)
{
try
{
int i = 1; // 计算多少个服务器线程
ServerSocket s = new ServerSocket(8189);
while (true)
{
System.out.println(“服务器启动,等待链接中…”);
Socket incoming = s.accept(); // 服务器监听等待链接,将阻塞线程!
System.out.println(“正在监听: 线程” + i);
Runnable r = new ThreadedEchoHandler(incoming); // 链接成功, 实例化线程接口
Thread t = new Thread(r); // 实例化线程
t.start(); // 启动线程
i++; // 计数器加1
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class ThreadedEchoHandler implements Runnable
{
private Socket incoming; // 收到的链接
public ThreadedEchoHandler(Socket incoming)
{
this.incoming = incoming;
}
@Override
public void run()
{
try
{
try
{
OutputStream outStream = incoming.getOutputStream(); // 获取Socket输出流,用于写出响应信息
InputStream inStream = incoming.getInputStream(); // 获取Socket输入流,用于读入客户端请求信息
Scanner in = new Scanner(inStream); // 获取输入流并以文本格式输入
PrintStream out = new PrintStream(outStream); // 以字节流打印服务器信息到输出流
System.out.println(“服务器链接初始化完毕!”); // 服务器端通知消息
out.println(“你好!请输入你请求的信息,退出输入[bye]”); // 客户端通知消息
// echo client input
boolean done = false;
while (!done && in.hasNextLine())
{
String line = in.nextLine(); // 读取一行
out.println(“Echo: ” + line);
if (line.trim().equals(“bye”))
done = true;
}
}
finally
{
SocketAddress sd = incoming.getRemoteSocketAddress();
incoming.close();
System.out.println(“链接: ” + sd + “已断开!”);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/*
ubuntu@xu-desktop:~$ javac -d . work/ThreadedEchoServer.java
ubuntu@xu-desktop:~$ java com.corejava.ThreadedEchoServer
服务器启动,等待链接中…
正在监听: 1
服务器启动,等待链接中…
服务器链接初始化完毕!
链接: /127.0.0.1:46903已断开!
正在监听: 2
服务器启动,等待链接中…
服务器链接初始化完毕!
链接: /127.0.0.1:46905已断开!
正在监听: 3
服务器启动,等待链接中…
服务器链接初始化完毕!
链接: /127.0.0.1:46907已断开!
正在监听: 4
服务器启动,等待链接中…
服务器链接初始化完毕!
链接: /127.0.0.1:42016已断开!
正在监听: 5
服务器启动,等待链接中…
服务器链接初始化完毕!
链接: /127.0.0.1:42018已断开!
正在监听: 6
服务器启动,等待链接中…
服务器链接初始化完毕!
链接: /127.0.0.1:42020已断开!
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《java实现服务器同时连接多客户端》
本文地址:http://www.xiupu.net/archives-170.html
关注公众号:
微信赞赏
支付宝赞赏