Welcome 微信登录

首页 / 操作系统 / Linux / 多线程TCP的socket通信

应用多线程来实现服务器与多客户端之间的通信。基本步骤:1.服务器端创建ServerSocket,循环调用accept()等待客户端的连接2.客户端创建一个socket并请求和服务器端的连接3.服务器端接收客户端的请求,创建socket与该客户端建立专线连接4.建立连接的两个socket在一个单独的线程上对话5.服务器端继续等待新的客户端的连接Server.javapublic class Server {public static void mainString[] args) throws IOException{//1、创建一个服务器端的socket,指定绑定的端口,并侦听此端口ServerSocket server = new ServerSocket(8888);System.out.println("********服务端即将启动,等待客户端的连接********");int count = 0;//2、开始侦听,等待客户端的连接whiletrue){Socket socket = server.accept();ServerThread thread = new   ServerThread(socket);thread.start();count++;System.out.println("客户端的数量:"+count);InetAddress address = socket.getInetAddress();System.out.println("客户端的ip:"+address.getHostAddress());}}}ServerThread.javapublic class ServerThread extends Thread { //和本线程相关的socketSocket socket = null;public ServerThreadSocket socket){this.socket = socket;}//线程执行操作,响应客户端的请求public void run(){InputStream is = null;InputStreamReader isr = null;BufferedReader br = null;OutputStream os = null;PrintWriter pw = null;try {//3、获取输入流,用来读取客户端发送的信息is = socket.getInputStream();//字节输入流isr = new InputStreamReader(is);//字符输入流br = new BufferedReader(isr);//缓冲输入流String info = null;while((info=br.readLine()) != null){//循环读取数据System.out.println("客户端说:"+info);}socket.shutdownInput();//关闭输入流 os = socket.getOutputStream();//字节输出流pw = new PrintWriter(os);//打印输出流pw.write("服务器端已接受你的请求,允许登录");pw.flush();socket.shutdownOutput();} catch (IOException e) {e.printStackTrace();} finally{try {//4、关闭资源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();}}}}Client.javapublic class Client { public static void mainString[] args) throws UnknownHostException, IOException{//1、创建客户端socket,指定服务器地址和端口Socket socket = new Socket("127.0.0.1",8888);System.out.println("******客户端已准备就绪*******");//2、给服务端发送数据OutputStream os = socket.getOutputStream();//字节流PrintWriter pw = new PrintWriter(os);//打印流pw.write("用户名:admin;密码:123456");pw.flush();socket.shutdownOutput();//关闭输出流InputStream is = socket.getInputStream();//字节输入流InputStreamReader isr = new InputStreamReader(is);//字符输入流BufferedReader br = new BufferedReader(isr);//缓冲输入流String info = null;while((info=br.readLine()) != null){System.out.println("服务端说:"+info);}socket.shutdownInput();//关闭输入流//3、关闭资源br.close();isr.close();is.close();pw.close();os.close();socket.close();}}本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139876.htm