左图:BIO Socket的单线程模式 右图:BIO Socket的多线程模式
public class SocketClient
{
public static void main(String args[]) throws Exception
{
Socket socket = new Socket("192.168.100.236", 2221);
System.out.println("socket created");
// send request
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
System.out.println("send: hello");
pw.write("hello");
pw.flush();
socket.shutdownOutput();
// receview response
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("received: ");
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
socket.shutdownInput();
//close resource
br.close();
pw.close();
os.close();
socket.close();
}
}
//服务器端(解决单客户端连接)
public class SocketServer
{
public static void main(String args[]) throws Exception
{
ServerSocket serverSocket = new ServerSocket(2221);
System.out.println("server socket created");
System.out.println("***");
Socket socket = serverSocket.accept();
//receives request
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("received: ");
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
socket.shutdownInput();
//send response
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
System.out.println("send: server received");
pw.write("server received");
pw.flush();
socket.shutdownOutput();
//close resource
pw.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
}
}
//多线程服务端(解决多客户端连接)
public class SocketServer
{
public static void main(String args[]) throws Exception
{
ServerSocket serverSocket = new ServerSocket(2221);
System.out.println("server socket created");
while (true) //循环监听,等待客户端的连接
{
System.out.println("***");
Socket socket = serverSocket.accept();
ServerHandler serverHandler = new ServerHandler(socket);
serverHandler.start();
}
}
class ServerHandler extends Thread
{
private final Logger logger = LoggerFactory.getLogger(getClass());
//与本线程相关的Socket
private Socket socket = null;
public ServerHandler(Socket socket)
{
this.socket = socket;
}
//线程执行的操作
public void run()
{
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
OutputStream os = null;
PrintWriter pw = null;
try
{
//receives request
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String line = null;
System.out.println("received: ");
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
socket.shutdownInput();
//send response
os = socket.getOutputStream();
pw = new PrintWriter(os);
System.out.println("send: server received");
pw.write("server received");
pw.flush();
socket.shutdownOutput();
}catch(Exception ex)
{
logger.error(ex.getMessage());
ex.printStackTrace(System.out);
}finally
{
//close resource
try
{
pw.close();
br.close();
isr.close();
is.close();
socket.close();
}catch(Exception ex)
{
ex.printStackTrace(System.out);
}
}
}
}
}