利用多线程和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);}}
