【BigData】Java基础_socket编程中使用多线程
在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