posts - 51, comments - 17, trackbacks - 0, articles - 9
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java TCP

          Posted on 2007-04-20 22:54 chenweicai 閱讀(369) 評論(0)  編輯  收藏
          public class ServerSocket
          extends Object
          
          

          此類實現服務器套接字服務器套接字等待請求通過網絡傳入。它基于該請求執行某些操作,然后可能向請求者返回結果。

          服務器套接字的實際工作由 SocketImpl 類的實例執行。應用程序可以更改創建套接字實現的套接字工廠來配置它自身,從而創建適合本地防火墻的套接字。



          public class Socket
          extends Object
          
          

          此類實現客戶端套接字(也可以就叫“套接字”)。套接字是兩臺機器之間的通信端點

          套接字的實際工作由 SocketImpl 類的實例執行。應用程序通過更改創建套接字實現的套接字工廠可以配置它自身,以創建適合本地防火墻的套接字。


          /**
           * 為了驗證我們的服務器程序能否正常工作,還必須有一個客戶端程序與之通信。
           * 我們也沒必要每次都要編寫客戶端程序來測試。其實, Windows提供的telnet
           * 程序,就是一個TCP客戶端程序,我們只要使用telnet程序對我們的服務器程序
           * 進行測試,我們只要在運行telnet程序時指定所要連接的服務器程序的IP地址
           * 和端口號,telnet程序就會按照指定的參數去與服務器程序進行連接。建立連接
           * 后,在telnet程序窗口中鍵入的內容會發送到服務器,從服務器端接收到的數據
           * 會顯示在窗口中。
           * 先運行TcpServer程序,然后在命令行中輸入 telnet 10.214.16.80 8001
           * 就會執行
           */

          // TCP 服務端程序
          public class TcpServer {

           public static void main(String[] args){
            
            try{
             //建立一個在8001端口上等待連接的ServerSocket對象
             ServerSocket ss = new ServerSocket(8001);
             
             //偵聽并接受到此套接字的連接。此方法在進行連接之前一直阻塞,返回客戶端套接字
             Socket s = ss.accept();
             
             InputStream ips = s.getInputStream();//返回此套接字的輸入流
             OutputStream ops = s.getOutputStream();//返回此套接字的輸出流
             
             //將字節從指定的字節數組寫入此輸出流
             ops.write("chenweicai...".getBytes());
             
          //   byte[] buf = new byte[1024];
          //   // 從輸入流中讀取一定數量的字節并將其存儲在緩沖區數組buf中
          //   int len = ips.read(buf);
          //   System.out.println(new String(buf, 0, len));
             
             //由于telent只要輸入就發送,而不管有沒有回車,所以只有第一個字符被發送。
             //java提供了一個BufferedReader類,可以幫助我們按行處理輸入流。
             BufferedReader br = new BufferedReader (new InputStreamReader(ips));
             System.out.println("The message comes form client: " + br.readLine());//輸出客戶端輸入的內容
             
             br.close();//關閉包裝類,會自動關閉包裝類中所包裝的底層類,所以不用調用ips.close().
          //   ips.close();
             ops.close();
             s.close();
             ss.close();
            }catch (Exception e){
             e.printStackTrace();
            }
           }
          }

          給個具體的例子

          /**
           * 實現服務器和客戶端之間的對話功能
           */
          public class Servicer implements Runnable {

           Socket s;
           
           public Servicer (Socket s){
            this.s = s;
           }
           
           public void run(){
            
            try {
             InputStream ips = s.getInputStream();
             OutputStream ops = s.getOutputStream();
             BufferedReader br = new BufferedReader(new InputStreamReader(ips));
             DataOutputStream dos = new DataOutputStream(ops);
             
             while(true){
              String strWord = br.readLine();
              System.out.println("From Client StrWord: " + strWord + strWord.length());
              if(strWord.equalsIgnoreCase("quit"))
               break;
              
              String strEcho = (new StringBuffer(strWord).reverse()).toString();
              dos.writeBytes(strWord + "---->" + strEcho + System.getProperty("line.separator"));
             }
             br.close();
             dos.close();
             s.close();
            } catch (IOException e) {
             e.printStackTrace();
            }
            
           }
          }


          import java.net.ServerSocket;
          import java.net.Socket;

          public class TcpServer {

           public static void main(String[] args){
            
            try{
             ServerSocket ss = new ServerSocket(8001);
             
             while(true){
              Socket s = ss.accept();
              new Thread(new Servicer(s)).start();
             }
            }catch(Exception e){
             
            }
           }
          }



          public class TcpClient {

           public static void main(String[] args){
            
            try{
             if(args.length < 2){
              System.out.println("Usage: java TcpClient ServerIP ServerPort");
              return;
             }
             
             Socket s = new Socket(InetAddress.getByName(args[0]), Integer.parseInt(args[1]));
             InputStream ips = s.getInputStream();
             OutputStream ops = s.getOutputStream();
             
             BufferedReader brKey = new BufferedReader(new InputStreamReader(System.in));
             DataOutputStream dos = new DataOutputStream(ops);
             BufferedReader brNet = new BufferedReader(new InputStreamReader(ips));
             
             while(true){
              String strWord = brKey.readLine();
              dos.writeBytes(strWord + System.getProperty("ling.separator"));
              if(strWord.equalsIgnoreCase("quit"))
               break;
              else
               System.out.println(brNet.readLine());
             }
             dos.close();
             brNet.close();
             brKey.close();
             s.close();
            }catch (Exception e){
             
            }
           }
          }


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 东安县| 蒙自县| 封开县| 吴川市| 凤阳县| 新竹县| 绍兴市| 驻马店市| 旅游| 肥西县| 绍兴县| 绥中县| 金门县| 洮南市| 洞头县| 德保县| 菏泽市| 丰城市| 鄂尔多斯市| 宁波市| 铜陵市| 吉木乃县| 河津市| 伊宁市| 邵阳县| 泗洪县| 英超| 云安县| 盖州市| 广汉市| 静海县| 叙永县| 喀喇| 霍山县| 商洛市| 宣武区| 饶阳县| 南平市| 遂昌县| 启东市| 永安市|