当前位置:首页 > Java技术 > 【BigData】Java基础_socket编程中使用多线程

【BigData】Java基础_socket编程中使用多线程

2022年11月09日 16:34:30Java技术10

在socket通信中使用多线程,主要为了解决当某个socket出现通信异常时候,导致通信阻塞,整个socket无法正常运行,处于等待状态,有了多线程,那么每个socket之间则可以独立运行,互不干扰。

以下是一个具体实现案例

客户端:ClientDemo.java

package cn.test.logan.day13.ThreadSocket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ClientDemo {
    public static void main(String[] args) throws Exception {
        while(true) {
            // 向服务端发出建立连接的请求
            Socket sc = new Socket("localhost",9998);
            //从连接拿到一个发数据的工具
            OutputStream out = sc.getOutputStream();
            
            // 发送第1个问题
            out.write("你是谁?".getBytes());
            
            // 接收第1个问题的答案
            InputStream in = sc.getInputStream();
            byte[] b = new byte[1024];
            int num = in.read(b);
            System.out.println("接收到第1个答案是:" + new String(b,0,num) );
            
            // 发送第2个问题
            out.write("你几岁了?".getBytes());
            // 接收第2个问题的答案
            num = in.read(b);
            System.out.println("接收到第2个答案是:" + new String(b,0,num) );
            in.close();
            out.close();
            sc.close();
        }
    }
}

服务端代码主方法:ServerDemo.java

package cn.test.logan.day13.ThreadSocket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 在socket中使用多线程
 * @author QIN
 *
 */
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9998);
        int i=1;
        while(true) {
            Socket sc = ss.accept();
            System.out.println("收到第"+i+"个客户端连接");
            SocketDemo socketDemo = new SocketDemo(sc);
            Thread thread = new Thread(socketDemo);
            thread.start();
            i++;
        }
        
    }
}

 

 服务端代码实现方法:SocketDemo.java

package cn.test.logan.day13.ThreadSocket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class SocketDemo implements Runnable{
    
    private Socket sc;
    // 定义构造方法
    public SocketDemo(Socket sc) {
        this.sc = sc;
    }
    @Override
    public void run() {
        try {
            // 获得输入输出流
            InputStream in = sc.getInputStream();
            OutputStream out = sc.getOutputStream();
            
            byte[] b = new byte[1024];
            
            // 接收第一个问题
            int num = in.read(b);
            System.out.println("收到来自客户端的问题1:"+new String(b,0,num));
            
            // 给客户端发送第一个问题的答案
            out.write("我是logan".getBytes());
            
            // 接收第二个问题
            num = in.read(b);
            System.out.println("收到来自客户端的问题2:"+new String(b,0,num));
            
            // 给客户端发送第二个问题的答案
            out.write("我22岁".getBytes());
            
            // 关闭流与连接
            in.close();
            out.close();
            sc.close();
            
        }catch (Exception e){
            System.out.println("出现异常了......");
        }
        
    }

}

 

 输出结果截图:

【BigData】Java基础_socket编程中使用多线程 _ JavaClub全栈架构师技术笔记

 

作者:OLIVER_QIN
来源链接:https://www.cnblogs.com/OliverQin/p/12150289.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68875.html

分享给朋友: