服务器连接设计
    image.png

    服务器线程设计
    image.png

    1. import java.io.BufferedReader;
    2. import java.io.IOException;
    3. import java.io.InputStreamReader;
    4. import java.io.PrintWriter;
    5. import java.net.ServerSocket;
    6. import java.net.Socket;
    7. import java.util.Scanner;
    8. /**
    9. * 发送消息线程
    10. */
    11. class Send1 extends Thread{
    12. private Socket socket;
    13. private Scanner scanner;
    14. public Send1(Socket socket,Scanner scanner){
    15. this.socket=socket;
    16. this.scanner=scanner;
    17. }
    18. @Override
    19. public void run() {
    20. this.sendMsg();
    21. }
    22. //发送消息的方法
    23. private void sendMsg(){
    24. PrintWriter printWriter = null;
    25. try{
    26. printWriter=new PrintWriter(this.socket.getOutputStream());
    27. while(true){
    28. String str = scanner.nextLine();
    29. printWriter.println(str);
    30. printWriter.flush();
    31. }
    32. }catch (Exception e){
    33. e.printStackTrace();
    34. }finally{
    35. if(scanner!=null){
    36. scanner.close();
    37. }
    38. if(printWriter!=null){
    39. printWriter.close();
    40. }
    41. if(socket!=null){
    42. try {
    43. socket.close();
    44. } catch (IOException e) {
    45. e.printStackTrace();
    46. }
    47. }
    48. }
    49. }
    50. }
    51. /**
    52. * 接收消息的线程
    53. */
    54. class Receive1 extends Thread{
    55. private Socket socket;
    56. public Receive1(Socket socket){
    57. this.socket=socket;
    58. }
    59. @Override
    60. public void run() {
    61. this.receive();
    62. }
    63. //接收消息的方法
    64. private void receive(){
    65. BufferedReader bufferedReader = null;
    66. try{
    67. bufferedReader=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
    68. while(true){
    69. String str=bufferedReader.readLine();
    70. System.out.println("对方说:"+str);
    71. }
    72. }catch (Exception e){
    73. e.printStackTrace();
    74. }finally {
    75. if(bufferedReader!=null){
    76. try {
    77. bufferedReader.close();
    78. } catch (IOException e) {
    79. e.printStackTrace();
    80. }
    81. }
    82. if(socket!=null){
    83. try {
    84. socket.close();
    85. } catch (IOException e) {
    86. e.printStackTrace();
    87. }
    88. }
    89. }
    90. }
    91. }
    92. public class ChartSocketOptimization {
    93. public static void main(String[] args) {
    94. Scanner scanner = null;
    95. ServerSocket serverSocket = null;
    96. Socket socket = null;
    97. try{
    98. scanner=new Scanner(System.in);
    99. System.out.println("请输入:server,<port>或者<ip>,<port>");
    100. String str = scanner.nextLine();
    101. String[] arr=str.split(",");
    102. if("server".equals(arr[0])){
    103. System.out.println("服务端开始监听:"+arr[1]+"......");
    104. serverSocket=new ServerSocket(Integer.parseInt(arr[1]));
    105. socket=serverSocket.accept();
    106. System.out.println("连接成功!!");
    107. }else{
    108. socket=new Socket(arr[0],Integer.parseInt(arr[1]));
    109. System.out.println("连接成功");
    110. }
    111. new Send1(socket,scanner).start();
    112. new Receive1(socket).start();
    113. }catch (Exception e){
    114. e.printStackTrace();
    115. }finally {
    116. if(serverSocket!=null){
    117. try {
    118. serverSocket.close();
    119. } catch (IOException e) {
    120. e.printStackTrace();
    121. }
    122. }
    123. }
    124. }
    125. }