利用多线程和TCP创建多个客户端与服务端通信
package JDBC_DemoDay07;/*
@create 2021--01--04--10:26
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//定义一个通信类
public class ServerThree extends Thread {
private Socket socket; //定义一个socket类
private OutputStream os; //输出流
private InputStream is; //输入流
public void setSocket(Socket socket) {
this.socket = socket;
}
//线程创建方法
public void run() {
try {
System.out.println("已启动一个线程来处理~");
//为输入输出流赋值
os = socket.getOutputStream();
is = socket.getInputStream();
//开始通信
//输出:传送信息给客户机
String outS = "Hello,Welcome to my ServerSocket!\t\n";
out(outS);
//输入:发送信息给服务器
ReadString();
//关闭连接
os.close();
is.close();
socket.close();
} catch (Exception e) {
}
}
//建立多个服务器连接
private void setUpServer(int prot) throws IOException {
//将输入的端口设置为服务器
ServerSocket server = new ServerSocket(prot);
//输出当前服务器的端口号
System.out.println("服务器创建成功,端口号:" + server.getLocalPort());
while (true) {
Socket socketPram = server.accept();
ServerThree ts = new ServerThree();
ts.setSocket(socketPram);
//启动线程
ts.start();
}
}
//输入:定义一个传送字符给服务器的方法
private void ReadString() throws IOException {
//将字符串转化为byte数组
String input = "";
while (!input.equals("bye")) {
input = "";
//读取第一个字符
int AsciiNumber = is.read();
while (AsciiNumber != 13) {
//将ascii码转化为相应的char型字符
input += (char) AsciiNumber;
//接收下一个字符
AsciiNumber = is.read();
}
System.out.println(input);
AsciiNumber = is.read();
}
}
//输出:定义一个输出信息到客户都的方法
private void out(String outS) throws IOException {
//将字字符串转化为byte数组
byte[] dataout = outS.getBytes();
//调用write()将信息发送给客户机
os.write(dataout);
//强制输出到命令行的界面中
os.flush();
}
//主函数入口
public static void main(String[] args) throws IOException {
//创建一个通信类的对象
ServerThree server = new ServerThree();
server.setUpServer(8091);
}
}