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

java

在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编程中使用多线程 的全部内容, 来源链接: utcz.com/z/394257.html

回到顶部