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

应用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 {

//和本线程相关的Socket
    Socket 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 {

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/630b5e5aeb7162b2e47088882c99784d.html