• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            Java Socket編程簡捷學習過程

              第一步 充分理解Socket

              1.什么是socket

              所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。

              以J2SDK-1.3為例,SocketServerSocket類庫位于java.net包中。ServerSocket用于服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對于一個網絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。

              重要的Socket API

              java.net.Socket繼承于java.lang.Object,有八個構造器,其方法并不多,下面介紹使用最頻繁的三個方法,其它方法大家可以見JDK-1.3文檔。

              . Accept方法用于產生"阻塞",直到接受到一個連接,并且返回一個客戶端的Socket對象實例。"阻塞"是一個術語,它使程序運行暫時"停留"在這個地方,直到一個會話產生,然后程序繼續;通常"阻塞"是由循環產生的。

              . getInputStream方法獲得網絡連接輸入,同時返回一個IutputStream對象實例,。

              . getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。

              注意:其中getInputStreamgetOutputStream方法均會產生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。

              2.如何開發一個Server-Client模型的程序

              開發原理:

              服務器,使用ServerSocket監聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接。

              客戶端,使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket。客戶端不需要指定打開的端口,通常臨時的、動態的分配一個1024以上的端口。

             ?。⒎掌鳎?span lang="EN-US">

              import java.net.*;

              import java.io.*;

              public class Server

              {

              private ServerSocket ss;

              private Socket socket;

              private BufferedReader in;

              private PrintWriter out;

              public Server()

              {

              try

              {

              ss = new ServerSocket(10000);

              while (true)

              {

              socket = ss.accept();

              in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

              out = new PrintWriter(socket.getOutputStream(),true);

              String line = in.readLine();

              out.println("you input is :" + line);

              out.close();

              in.close();

              socket.close();

              }

              ss.close();

              }

              catch (IOException e)

              {}

              }

              public static void main(String[] args)

              {

              new Server();

              }

              }

              這個程序建立了一個服務器,它一直監聽10000端口,等待用戶連接。在建立連接后給客戶端返回一段信息,然后結束會話。這個程序一次只能接受一個客戶連接。

             ?。⒖蛻舳耍?span lang="EN-US">

              import java.io.*;

              import java.net.*;

              public class Client

              {

              Socket socket;

              BufferedReader in;

              PrintWriter out;

              public Client()

              {

              try

              {

              socket = new Socket("xxx.xxx.xxx.xxx", 10000);

              in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

              out = new PrintWriter(socket.getOutputStream(),true);

              BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

              out.println(line.readLine());

              line.close();

              out.close();

              in.close();

              socket.close();

              }

              catch (IOException e)

              {}

              }

              public static void main(String[] args)

              {

              new Client();

              }

              }

              這個客戶端連接到地址為xxx.xxx.xxx.xxx的服務器,端口為10000,并從鍵盤輸入一行信息,發送到服務器,然后接受服務器的返回信息,最后結束會話。

              第二步 多個客戶同時連接

              在實際的網絡環境里,同一時間只對一個用戶服務是不可行的。一個優秀的網絡服務程序除了能處理用戶的輸入信息,還必須能夠同時響應多個客戶端的連接請求。在java中,實現以上功能特點是非常容易的。

              設計原理:

              主程序監聽一端口,等待客戶接入;同時構造一個線程類,準備接管會話。當一個Socket會話產生后,將這個會話交給線程處理,然后主程序繼續監聽。運用Thread類或Runnable接口來實現是不錯的辦法。

              {實現消息共享}

              import java.io.*;

              import java.net.*;

              public class Server extends ServerSocket

              {

              private static final int SERVER_PORT = 10000;

              public Server() throws IOException

              {

              super(SERVER_PORT);

              try

              {

              while (true)

              {

              Socket socket = accept();

              new CreateServerThread(socket);

              }

              }

              catch (IOException e)

              {}

              finally

              {

              close();

              }

              }

              //--- CreateServerThread

              class CreateServerThread extends Thread

              {

              private Socket client;

              private BufferedReader in;

              private PrintWriter out;

              public CreateServerThread(Socket s) throws IOException

              {

              client = s;

              in = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312"));

              out = new PrintWriter(client.getOutputStream(), true);

              out.println("--- Welcome ---");

              start();

              }

              public void run()

              {

              try

              {

              String line = in.readLine();

              while (!line.equals("bye"))

              {

              String msg = createMessage(line);

              out.println(msg);

              line = in.readLine();

              }

              out.println("--- See you, bye! ---");

              client.close();

              }

              catch (IOException e)

              {}

              }

              private String createMessage(String line)

              {

              xxxxxxxxx;

              }

              }

              public static void main(String[] args) throws IOException

              {

              new Server();

              }

              }clip_image001

            posted on 2009-08-14 18:32 肥仔 閱讀(256) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

            精品熟女少妇av免费久久| 四虎亚洲国产成人久久精品| 国产亚洲精久久久久久无码77777| 久久综合一区二区无码| 97精品国产97久久久久久免费| 久久天天躁狠狠躁夜夜avapp| 久久精品国产亚洲AV麻豆网站| 久久99精品国产99久久6男男| 久久综合久久性久99毛片| 亚洲午夜久久久久久久久电影网 | 伊人久久大香线蕉无码麻豆| 久久强奷乱码老熟女网站| 97久久香蕉国产线看观看| 久久中文精品无码中文字幕| 日韩精品久久无码人妻中文字幕| 99久久国产亚洲高清观看2024| 中文字幕无码久久人妻| 国内精品久久久久影院免费| 欧美久久久久久| 狠狠久久综合伊人不卡| 亚洲日本va中文字幕久久| 狠狠色综合久久久久尤物| 国产成人精品白浆久久69| 精品久久久久久无码人妻蜜桃| 无码人妻精品一区二区三区久久 | 久久青草国产精品一区| 久久久久久久精品成人热色戒| 久久精品国产一区| 亚洲狠狠婷婷综合久久久久| 久久夜色精品国产亚洲av| 欧美综合天天夜夜久久| 久久国产精品99国产精| 色欲久久久天天天综合网精品| 久久亚洲2019中文字幕| 精品久久综合1区2区3区激情| AV无码久久久久不卡蜜桃| 日韩AV无码久久一区二区| 国产偷久久久精品专区| 久久香综合精品久久伊人| 欧美伊人久久大香线蕉综合69 | 精品国产乱码久久久久久郑州公司 |