应用java多线程实现服务器端与多客户端之间的通信

应用多线程来实现服务器与多线程之间的通信的基本步骤1、服务器端创建ServerSocket,循环调用accept()等待客户端链接2、客户端创建一个Socket并请求和服务器端链接3、服务器端接受客户端请求,创建socekt与该客户端建立专线链接4、建立链接的socket在一个单独的线程上对话5、服务器继续等待新的链接

服务器端Server.java

package test.concurrent.socket;import java.io.*;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;/** * Created by dong on 15-6-22. * 基于TCP协议的Socket通信,实现用户登录 * 服务器端 */public class Server {public static void main(String[] args) {try {//1、创建一个服务器端Socket,即ServerSocket, 指定绑定的端口,并监听此端口ServerSocket serverSocket = new ServerSocket(8888);Socket socket = null;//记录客户端的数量int count = 0;System.out.println("***服务器即将启动,等待客户端的链接***");//循环监听等待客户端的链接while (true){//调用accept()方法开始监听,等待客户端的链接socket = serverSocket.accept();//创建一个新的线程ServerThread serverThread = new ServerThread(socket);//启动线程serverThread.start();count++; //统计客户端的数量System.out.println("客户端的数量: " + count);InetAddress address = socket.getInetAddress();System.out.println("当前客户端的IP : " + address.getHostAddress());}} catch (IOException e) {e.printStackTrace();}}}服务器端线程处理类ServerThread.java

package test.concurrent.socket;import java.io.*;import java.net.Socket;/** * Created by dong on 15-6-22. * 服务器端线程处理类 */public class ServerThread extends Thread {//和本线程相关的SocketSocket socket = null;public ServerThread(Socket socket){this.socket = socket;}//线程执行的操作,响应客户端的请求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 = null;//循环读取数据while ((info = br.readLine()) != null){System.out.println("我是服务器,,客户端说: " +info);}socket.shutdownInput(); //关闭输入流//获取输出流,响应客户端的请求os = socket.getOutputStream();pw = new PrintWriter(os); //包装为打印流pw.write("欢迎你");pw.flush(); //将缓存输出} catch (IOException e) {e.printStackTrace();}finally {try {//关闭资源if (pw != null)pw.close();if (os != null)os.close();if (is != null)is.close();if (isr != null)isr.close();if (br != null)br.close();if (socket != null)socket.close();} catch (IOException e) {e.printStackTrace();}}}}客户端Client.java

package test.concurrent.socket;import java.io.*;import java.net.Socket;/** * Created by dong on 15-6-22. * 客户端 */public class Client {public static void main(String[] args) {try {//1、创建客户端Socket,指定服务器端口号和地址Socket socket = new Socket("localhost",8888);//2、获取输出流,向服务器发送信息OutputStream os = socket.getOutputStream(); //字节输出流PrintWriter pw = new PrintWriter(os); //将输出流包装为打印流pw.write("用户名:tom; 密码:456");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);}br.close();is.close();isr.close();pw.close();os.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}

只有经历过地狱般的折磨,才有征服天堂的力量。

应用java多线程实现服务器端与多客户端之间的通信

相关文章:

你感兴趣的文章:

标签云: