服务端
java
package socket; import java.io.BufferedReader; 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; /** *socket服务端 * */ public class TCPServer { public static void main(String[] args) { try { // 建立一个服务端socket实例,并绑定指定端口,同时监听该端口 ServerSocket serversocket = new ServerSocket(7777); Socket socket = null; System.out.println("服务端已启动,正在监听......"); int count = 0;//记录客户端的数量 //循环创建客户端监听 while(true){ //调用accept()启动端口监听,等待客户端请求 socket = serversocket.accept();//监听7777端口 //建立一个新线程 ServerThread st = new ServerThread(socket); //启动线程 st.start(); count++; System.out.println("客户端数量"+count); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
服务端已启动,正在监听......缓存
客户端数量1socket
服务端捕获到客户端信息:######用户名:admin 密码:1234ide
客户端数量2this
服务端捕获到客户端信息:######用户名:admin 密码:1234用户名:user 密码:567.net
客户端一线程
package socket; import java.io.BufferedReader; 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.net.UnknownHostException; public class TCPClient { public static void main(String[] args) { try { //建立客户端socket,指定服务端地址和端口 Socket socket = new Socket("localhost", 7777); //创建一个输出流,用于向服务端发送信息 OutputStream os = socket.getOutputStream(); //建立一个打印流并包装输出流 PrintWriter pw = new PrintWriter(os); pw.write("用户名:admin 密码:1234"); pw.flush();//刷新缓存 //关闭资源 socket.shutdownOutput(); //建立输入流,用于读取服务端响应信息 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String serinfo = br.readLine(); while(!"".equals(serinfo) && serinfo != null){ System.out.println("客户端获取服务端响应信息:*****"+serinfo); serinfo = br.readLine(); } socket.shutdownInput(); br.close(); isr.close(); is.close(); pw.close(); os.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
客户端二code
package socket; import java.io.BufferedReader; 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.net.UnknownHostException; public class TCPClient { public static void main(String[] args) { try { //建立客户端socket,指定服务端地址和端口 Socket socket = new Socket("localhost", 7777); //创建一个输出流,用于向服务端发送信息 OutputStream os = socket.getOutputStream(); //建立一个打印流并包装输出流 PrintWriter pw = new PrintWriter(os); pw.write("用户名:admin 密码:1234"); pw.write("用户名:user 密码:567"); pw.flush();//刷新缓存 //关闭资源 socket.shutdownOutput(); //建立输入流,用于读取服务端响应信息 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String serinfo = br.readLine(); while(!"".equals(serinfo) && serinfo != null){ System.out.println("客户端获取服务端响应信息:*****"+serinfo); serinfo = br.readLine(); } socket.shutdownInput(); br.close(); isr.close(); is.close(); pw.close(); os.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
服务端线程处理类server
package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; /** * 服务端线程处理类 * */ public class ServerThread extends Thread { // 与本线程相关的Socket Socket socket = null; public ServerThread(Socket socket) { this.socket = socket; } //执行线程操做,响应客户端请求 @Override public void run() { InputStream is = null; InputStreamReader isr = null; BufferedReader br = null; OutputStream os = null; PrintWriter pw = null; try { is = socket.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); String info = br.readLine(); while(!"".equals(info) && info != null){ System.out.println("服务端捕获到客户端信息:######"+info); info = br.readLine(); } //关闭相关资源 socket.shutdownInput(); //服务端建立输出流,响应客户端请求 os = socket.getOutputStream(); pw = new PrintWriter(os); pw.write("用户名密码正确,欢迎登录"); pw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ try { //关闭相关资源 socket.shutdownOutput(); //关闭其余资源 if(pw != null) pw.close(); if(os != null) os.close(); if(br != null) br.close(); if(isr != null) isr.close(); if(is != null) is.close(); if(socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { } }