⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java

📁 用JAVA实现多线程网络服务器与客户端通讯的简单程序
💻 JAVA
字号:
package Pro123;

import java.awt.*;
   import java.net.*; 
   import java.io.*;
   import java.util.*;
   public class Server extends Thread {
        ServerSocket skt;

        static Socket Client[]=new Socket[10];;
        Socket Client1=null;
         int[] clientjishu={0};
        int i = 0;
         static String clientname[]=new String[10];;
        
        TextArea in;
        static int k=0;
        int port,l=0;

        //BufferedReader theInputStream;

        PrintStream theOutputStream;
       //String readin;

        Face chat;

        public Server(int port, Face chat) {
            try {
                this.port = port;
                skt = new ServerSocket(port);
                this.chat = chat; 
                
                } catch (IOException e) {
                chat.ta.append(e.toString());
            }
        }

        public void run() {

            chat.ta.append("等待连线");

            while (true) {
                //System.out.print(""+i+"\n");
                try {


                Client[k] = skt.accept(); /**//* 接收客户连接 */
                
                //当有客户端连接时就新建一个子线程


                if (i < 2) {
                    ServerThread server[] = new ServerThread[10];
                     server[k]= new ServerThread(Client[k], this.chat, i);
                     BufferedReader theInputStream = new BufferedReader(new InputStreamReader(Client[k]
                             .getInputStream()));
                     clientname[k]=theInputStream.readLine();
                     //StringTokenizer tokenizer =
                     
                         //new StringTokenizer(j, "_");
                     
                     l=server.length;
                   server[k].start();
                    chat.ta.append("客户端" + Client[k].getInetAddress() + "已连线\n");
                   /**//*theInputStream = new BufferedReader(new InputStreamReader(Client
                            .getInputStream()));*/
                   //for(int j=0;j<server.length;j++)
                    theOutputStream = new PrintStream(server[k].getClient().getOutputStream());
                    i = server[k].getI();
                    k++;
                } else {
                  //theOutputStream = new PrintStream(null);
                }

            } catch (SocketException e) {
                //chat.ta.append("连线中断!\n");

                //chat.clientBtn.setEnabled(true);
                //chat.serverBtn.setEnabled(true);
                //chat.tfaddress.setEnabled(true);
                //chat.tfport.setEnabled(true);
                //try {

                        //skt.close();
                        //Client.close();
                    //} catch (IOException err) {
                    //    chat.ta.append(err.toString());
                    //}
                } catch (IOException e) {
                    chat.ta.append(e.toString());
                }
            }

        }

        public void dataout(String data) {
            //for(int j=0;j<l;j++)
            theOutputStream.println(data);
        }
        public static Socket getSocket(String b){
        	for(int i=0;i<10;i++)
        		{
        		   if(b.equals(clientname[i]))
        			{return Client[i];
        		     }
        		}
        	return null;
        }
    }

   class ServerThread extends Thread {
       ServerSocket skt;

        Socket Client;
        String m1,m2;
       TextArea in;

       int port;
       String liuzhe=null;
       int i;
       BufferedReader theInputStream;

       PrintStream theOutputStream;

      String readin;

  Face chat;

//服务端子线程 

   public ServerThread(Socket s, Face chat, int i) {
       this.i = ++i;
       Client = s;
      
           //this.port = port;
           //skt = new ServerSocket(port);
          this.chat = chat;

      }

  public int getI() {
       return this.i;
       }
      public Socket getClient() {
           return this.Client;
      }
   public void run() {

           //chat.ta.append("等待连线");

      try {
              //Client = skt.accept(); /* 接收客户连接 */

               //chat.ta.append("客户端" + Client.getInetAddress() + "已连线\n");
               theInputStream = new BufferedReader(new InputStreamReader(Client
                       .getInputStream()));
               theOutputStream = new PrintStream(Client.getOutputStream());

              while (true) {
                  readin = theInputStream.readLine();
                  StringTokenizer tokenizer =
                      new StringTokenizer(readin, "_");
                  
                   m1=tokenizer.nextToken();
                   m2=tokenizer.nextToken();
                   while(tokenizer.hasMoreTokens()){
                	   m2=m2+"_";
                	   m2=m2+tokenizer.nextToken();
                   }
                   Socket s1=Server.getSocket(m1);
                   if(s1!=null){
                   PrintStream print=new PrintStream(s1.getOutputStream());
                   print.println(m2);
                   }
                   else {
                	   
                   }
                 chat.ta.append(m1+"\n"+readin + "\n");
              }

      } catch (SocketException e) {
               chat.ta.append("连线中断!\n");

              chat.clientBtn.setEnabled(true);
              chat.serverBtn.setEnabled(true);
        chat.tfaddress.setEnabled(true);
             chat.tfport.setEnabled(true);
              try {
                 i--;
             skt.close();
               Client.close();
              } catch (IOException err) {
                   chat.ta.append(err.toString());
              }
         } catch (IOException e) {
              chat.ta.append(e.toString());
           }
      }

      public void dataout(String data) {
           theOutputStream.println(data);
       }
   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -