利用多线程和TCP创建多个客户端与服务端通信

    1. package JDBC_DemoDay07;/*
    2. @create 2021--01--04--10:26
    3. */
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.io.OutputStream;
    7. import java.net.ServerSocket;
    8. import java.net.Socket;
    9. //定义一个通信类
    10. public class ServerThree extends Thread {
    11. private Socket socket; //定义一个socket类
    12. private OutputStream os; //输出流
    13. private InputStream is; //输入流
    14. public void setSocket(Socket socket) {
    15. this.socket = socket;
    16. }
    17. //线程创建方法
    18. public void run() {
    19. try {
    20. System.out.println("已启动一个线程来处理~");
    21. //为输入输出流赋值
    22. os = socket.getOutputStream();
    23. is = socket.getInputStream();
    24. //开始通信
    25. //输出:传送信息给客户机
    26. String outS = "Hello,Welcome to my ServerSocket!\t\n";
    27. out(outS);
    28. //输入:发送信息给服务器
    29. ReadString();
    30. //关闭连接
    31. os.close();
    32. is.close();
    33. socket.close();
    34. } catch (Exception e) {
    35. }
    36. }
    37. //建立多个服务器连接
    38. private void setUpServer(int prot) throws IOException {
    39. //将输入的端口设置为服务器
    40. ServerSocket server = new ServerSocket(prot);
    41. //输出当前服务器的端口号
    42. System.out.println("服务器创建成功,端口号:" + server.getLocalPort());
    43. while (true) {
    44. Socket socketPram = server.accept();
    45. ServerThree ts = new ServerThree();
    46. ts.setSocket(socketPram);
    47. //启动线程
    48. ts.start();
    49. }
    50. }
    51. //输入:定义一个传送字符给服务器的方法
    52. private void ReadString() throws IOException {
    53. //将字符串转化为byte数组
    54. String input = "";
    55. while (!input.equals("bye")) {
    56. input = "";
    57. //读取第一个字符
    58. int AsciiNumber = is.read();
    59. while (AsciiNumber != 13) {
    60. //将ascii码转化为相应的char型字符
    61. input += (char) AsciiNumber;
    62. //接收下一个字符
    63. AsciiNumber = is.read();
    64. }
    65. System.out.println(input);
    66. AsciiNumber = is.read();
    67. }
    68. }
    69. //输出:定义一个输出信息到客户都的方法
    70. private void out(String outS) throws IOException {
    71. //将字字符串转化为byte数组
    72. byte[] dataout = outS.getBytes();
    73. //调用write()将信息发送给客户机
    74. os.write(dataout);
    75. //强制输出到命令行的界面中
    76. os.flush();
    77. }
    78. //主函数入口
    79. public static void main(String[] args) throws IOException {
    80. //创建一个通信类的对象
    81. ServerThree server = new ServerThree();
    82. server.setUpServer(8091);
    83. }
    84. }