package com.xudeyu.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerSocketTest
{
public static void main(String[] args)
{
ServerTest test = new ServerTest();
test.acceptClient(9999);
}
}
class ServerTest
{
public void acceptClient(int port)
{
try
{
// 创建一个serverSocket,用于监听
ServerSocket server = new ServerSocket(port);
while (true)
{
int i = 1; // 接入的主机数量
// 接入一个新的Socket
Socket incomingsocket = server.accept();
System.out.println("Spawing " + i);
// 为每一个连接的Socket创建一个线程
Runnable r = new ServerThread(incomingsocket);
Thread t = new Thread(r);
t.start();
i++;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class ServerThread implements Runnable
{
// Socket
private Socket incoming;
public ServerThread(Socket i)
{
incoming = i;
}
@Override
public void run()
{
try
{
// 获取该套接字的输出流和输入流
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
// 打印套接字内的信息
Scanner in = new Scanner(inStream);
// 向套接字内输出信息
PrintWriter pw = new PrintWriter(outStream, true);
// 在控制台中向远处主机发送输入的消息
Scanner input = new Scanner(System.in);
pw.print("Hello ,Enter BEY to exit!");
// 直到读取到BEY 结束
//TODO 标记
boolean done = false;
while (!done &&input.hasNextLine())
{
String line = input.nextLine();
pw.println(">>>>>服务器发送:" + line);
pw.println("<<<<<主机发送:"+ in.nextLine());
if (line.toUpperCase().trim().equals("BEY"))
{
done = true;
}
}
}
catch (Exception e)
{
e.printStackTrace();
System.out.print("conn interrupt");
}
finally
{
try
{
incoming.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}