魚躍于淵

          First know how, Second know why !
          posts - 0, comments - 1, trackbacks - 0, articles - 49

          [摘要] 其實(shí),簡單的分析一下,就可以看出客戶和服務(wù)通訊的主要通道就是Socket本身,而服務(wù)器通過accept方法就是同意和客戶建立通訊.這樣當(dāng)客戶建立Socket的同時。服務(wù)器也會使用這一根連線來先后通訊,那么既然如此只要我們存在多條連線就可以了。
          [關(guān)鍵字]
          Socket 網(wǎng)絡(luò)編程
          其實(shí),簡單的分析一下,就可以看出客戶和服務(wù)通訊的主要通道就是Socket本身,而服務(wù)器通過accept方法就是同意和客戶建立通訊.這樣當(dāng)客戶建立Socket的同時。服務(wù)器也會使用這一根連線來先后通訊,那么既然如此只要我們存在多條連線就可以了。那么我們的程序可以變?yōu)槿缦?
          那么下面的問題是如何使用線程.首先要做的事情是創(chuàng)建線程并使得其可以和網(wǎng)絡(luò)連線取得聯(lián)系。然后由線程來執(zhí)行剛才的操作,要創(chuàng)建線程要么直接繼承Thread要么實(shí)現(xiàn)Runnable接口,要建立和Socket的聯(lián)系只要傳遞引用就可以了.而要執(zhí)行線程就必須重寫run方法,而run方法所做的事情就是剛才單線程版本main所做的事情,因此我們的程序變成了這樣:

          import java.net.*;
          import java.io.*;

          public class MultiUser extends Thread{
            private Socket client;

            public MultiUser(Socket c){
             this.client=c;
            }

            public void run(){
          try{
              BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
              PrintWriter out=new PrintWriter(client.getOutputStream());
              //Mutil User but can parallel
              while(true){
               String str=in.readLine();
               System.out.println(str);
               out.println("has receive....");
               out.flush();
               if(str.equals("end"))
                break;
          }
              client.close();
          }catch(IOException ex){
          }finally{
             }
            }

            public static void main(String[] args)throws IOException{
             ServerSocket server=new ServerSocket(5678);
             while(true){
             //transfer location change Single User or Multi User
             MultiUser mu=new MultiUser(server.accept());
             mu.start();
             }
            }
          }



          客戶端代碼:

          import Java.net.*;
          import Java.io.*;

          public class Client{
          static Socket Server;

          public static void main(String[] args) throws Exception
          {
          Server=new Socket (InetAddress.getLocalHost(),5678);
          BufferedReader in=new BufferedReader(new InputStreamReader(Server.getInputStream()));
          PrintWriter out=new PrintWriter(Server.getOutputStream());
          BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
          while(true)
          {
          String str=wt.readLine();
          out.println(str);
          out.flush();
          if(str.equals("end"))
          {
          break;
          }
          System.out.println(in.readLine());
          }
          Server.close();
          }
          }

          這段程序是接受客戶的鍵盤輸入,并把信息輸出到服務(wù)端。并把"end"作為退出的命令

          以上程序完成了兩臺計算機(jī)的簡單通信。

          主站蜘蛛池模板: 楚雄市| 平定县| 济南市| 静海县| 平乐县| 武安市| 中山市| 甘泉县| 中宁县| 南投市| 宜兰县| 大宁县| 额尔古纳市| 剑阁县| 临沭县| 宜春市| 临江市| 永泰县| 黔东| 荃湾区| 廉江市| 赣榆县| 延边| 蒙自县| 溧水县| 略阳县| 农安县| 昭平县| 锦州市| 随州市| 察隅县| 扶余县| 伊川县| 祥云县| 沽源县| 富锦市| 东宁县| 政和县| 新干县| 崇明县| 灌南县|