socket(多线程)

版权声明:分享知识是一种快乐,愿你我都能共同成长! https://blog.csdn.net/qidasheng2012/article/details/78177234

服务端:

线程类:

package cn.itcast.webservice.socket.server.thread;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

/**
 * Description: 天气查询runnable类
 */
public class WeatherRunnable implements Runnable {

    private Socket socket;

    public WeatherRunnable(Socket socket){
        this.socket=socket;
    }

    @Override
    public void run() {
        // 创建输入流接收数据
        DataInputStream inputStream = null;

        // 创建输出流响应数据
        DataOutputStream outputStream = null;

        try {
            outputStream = new DataOutputStream(socket.getOutputStream());

            inputStream = new DataInputStream(socket.getInputStream());

            // 接收客户端的请求数据
            String cityName = inputStream.readUTF();
            System.out.println("from client..." + cityName);

            // 休眠2秒表示服务端的处理过程
            Thread.sleep(2000);
            // 使用静态代码表示查询的结果
            String result = "晴";

            // 服务端向客户端响应结果
            outputStream.writeUTF(result);
            System.out.println("to client..." + result);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            // 注意一般情况 下服务端不能主动关闭客户端的socket连接

        }

    }

}

多线程类:

package cn.itcast.webservice.socket.server.thread;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Description:天气查询服务端
 */
public class WeatherServer {

    public static void main(String[] args) throws IOException {

            // 创建服务,监听 的端口建议1万以上
            ServerSocket serverSocket = new ServerSocket(12345);
            System.out.println("服务端已启动....");

        while (true) {
            // 监听 客户端的连接,accept方法一个阻塞方法
            Socket socket = serverSocket.accept();

            //接收到客户端请求要开启一个线程来处理
             new Thread(new WeatherRunnable(socket)).start();

             //在企业开发中建议使用线程池对所有线程进行统一管理,线程不用每次都创建一个新的
             //使用ThreadPoolExecutor实现线程池


        }

    }

}

客户端:

package cn.itcast.webservice.socket.client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * Description:天气查询socket客户端
 */
public class WeatherClient {

    public static void main(String[] args) throws UnknownHostException,
            IOException {
        while (true) {
            // 向服务端创建socket连接
            Socket socket = new Socket("127.0.0.1", 12345);

            // 创建输入流接收数据
            DataInputStream inputStream = null;

            // 创建输出流发送数据
            DataOutputStream outputStream = null;

            try {
                // 输出流
                outputStream = new DataOutputStream(socket.getOutputStream());
                // 输入流
                inputStream = new DataInputStream(socket.getInputStream());

                // 发送城市名称
                String cityName = "北京";
                outputStream.writeUTF(cityName);
                System.out.println("to server ..." + cityName);

                // 接收服务端响应
                String result = inputStream.readUTF();

                System.out.println("from server..." + result);

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 关闭流
                if (inputStream != null) {
                    inputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
                // 由客户端来关闭socket连接
                if (socket != null) {
                    socket.close();
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qidasheng2012/article/details/78177234