国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java網(wǎng)絡(luò)編程

2019-11-15 00:54:27
字體:
供稿:網(wǎng)友
java網(wǎng)絡(luò)編程

.TCP程序設(shè)計

在JAVA中使用Socket(即套接字)完成TCP程序的開發(fā),使用此類可以方便的建立可靠的,雙向的,持續(xù)的,點對點的通信連接。

在Socket的程序開發(fā)中,服務(wù)器端使用ServerSocke等待客戶端的連接,對于java的網(wǎng)絡(luò)程序來講,每一個客戶端都使用一個Socket對象表示。

.ServerSocket類的常用方法

序號方法類型描述
1public ServerSocket(int port)throws IOException構(gòu)造函數(shù)創(chuàng)建ServerSocket實例,并監(jiān)聽指定的端口。
2public Socket accept()throws IOException普通函數(shù)等待客戶端連接,此方法連接之前一直阻塞
3public InetAddress getInetAddress()普通函數(shù)返回服務(wù)器的ip地址
4public boolean isClosed()普通函數(shù)返回ServerSocket的關(guān)閉狀態(tài)
5public void close()throws IOException普通函數(shù)關(guān)閉ServerSocket

在服務(wù)器端每次運行時都要使用accept()方法等待客戶端連接,此方法執(zhí)行之后服務(wù)器端將進入阻塞狀態(tài),直到客戶端連接之后程序才可以向下繼續(xù)執(zhí)行。此方法的返回值類型是Socket,每一個Socket都表示一個客戶端對象。

.Socket類的常用方法:

序號方法類型描述
1public Socket(String host , int port)throws UnknownHostException,IOException構(gòu)造構(gòu)造Socket對象,同時指定要連接服務(wù)器的主機名及連接端口號。
2public InputStream getInputStream() throws IOException普通返回此套接字的輸入流
3public OutputStream getOutputStream() throws IOException返回此套接字的輸出流
4public void close() throws IOException關(guān)閉此Socket
5public boolean isClosed()判斷此套接字是否被關(guān)閉

.第一個TCP程序--Echo程序

Echo 程序是一個網(wǎng)絡(luò)編程通信交互的一個典型的案例,稱為回應(yīng)程序,即客戶端輸入哪些內(nèi)容,服務(wù)器端會在這些內(nèi)容前加上“ECHO:”并將信息發(fā)回客戶端。

之前的程序代碼,服務(wù)器端每次執(zhí)行完畢后,服務(wù)器都會退出,這是因為服務(wù)器端只能接受一個客戶端的連接,主要是由于accept()方法只能使用一次,本程序中將通過

循環(huán)的方法使用accept()方法,這樣,每一個客戶端執(zhí)行完畢后,服務(wù)器端都可以重新等待用戶連接。

單線程范例:

EchoClient 
 1 public class EchoClient { 2     public static void main(String[] args) throws IOException { 3  4         Socket client = new Socket("localhost", 8888); 5         BufferedReader buf = null; 6         PRintStream out = null; 7         out = new PrintStream(client.getOutputStream()); 8         out.println(1); 9         BufferedReader input = null;10         input = new BufferedReader(new InputStreamReader(System.in));11         buf = new BufferedReader(new InputStreamReader(client.getInputStream()));12         boolean flag = true;13 14         while (flag) {15             System.out.println("Please Key In:");16             String str = input.readLine();17             out.println(str);18             if ("bye".equals(str)) {19                 flag = false;20             } else {21                 String echo = buf.readLine();22 23                 System.out.println("1111" + echo);24             }25         }26         client.close();27         buf.close();28     }29 }

單線程范例:

EchoServer 
 1 public class EchoServer { 2     public static void main(String[] args) throws IOException { 3         ServerSocket server = null; 4         Socket client = null; 5         PrintStream out = null; 6         BufferedReader buf = null; 7         server = new ServerSocket(8888); 8         boolean f = true; 9         while (f) {10             System.out.println("Server Running,Waiting for Client");11             client = server.accept();12             out = new PrintStream(client.getOutputStream());13             // 獲取客戶端輸入的信息14             buf = new BufferedReader(new InputStreamReader(15                     client.getInputStream()));16             // 實例化輸出端17             out = new PrintStream(client.getOutputStream());18             boolean flag = true;19             while (flag) {20                 String str = buf.readLine();21                 if (str == null || "".equals(str)) {22                     flag = false;23                 } else {24                     if ("bye".equals(str)) {25                         flag = false;26                     } else {27                         out.println("ECHO" + str);28                     }29                 }30             }31             out.close();32             client.close();33         }34         server.close();35     }36 37 }

多線程范例:

EchoThread 
 1 public class EchoThread implements Runnable { 2  3     private Socket client = null; 4  5     public EchoThread(Socket client) { 6         this.client = client; 7     } 8  9     public void run() {10         PrintStream out = null;11         BufferedReader buf = null;12 13         try {14             buf = new BufferedReader(new InputStreamReader(15                     client.getInputStream()));16             out = new PrintStream(client.getOutputStream());17             boolean flag = true;18 19             while (flag) {20                 String str = buf.readLine();21                 if (str == null || "".equals(str)) {22                     flag = false;23                 } else {24                     if ("bye".equals(str)) {25                         flag = false;26                     } else {27                         out.println("ECHO:" + str);28                     }29                 }30             }31             out.close();32             client.close();33         } catch (Exception e) {34         }35     }36 37 }

多線程范例:

EchoServer 
 1 public class EchoServer { 2     public static void main(String[] args) throws IOException { 3         ServerSocket server = null; 4         Socket client = null; 5         PrintStream out = null; 6         BufferedReader buf = null; 7         server = new ServerSocket(8888); 8         boolean f = true; 9         while (f) {10             System.out.println("Server Running,Waiting for Client");11             client = server.accept();12             new Thread(new EchoThread(client)).start();13             14         }15         server.close();16     }17 18 }

在服務(wù)器端,每一個連接到服務(wù)器的客戶端Socket都會以一個線程的方式運行,這樣無論有多少個客戶連接都可以同時完成操作。

未完待續(xù)。。。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 周至县| 彩票| 城口县| 大理市| 济南市| 吉安县| 修水县| 宁夏| 凤阳县| 邛崃市| 元朗区| 南开区| 时尚| 酒泉市| 轮台县| 彩票| 连江县| 扎赉特旗| 逊克县| 楚雄市| 铜山县| 彰化县| 滁州市| 菏泽市| 囊谦县| 阿巴嘎旗| 公主岭市| 额尔古纳市| 莆田市| 介休市| 宣化县| 齐河县| 丰城市| 斗六市| 巨野县| 诏安县| 普兰店市| 惠安县| 洱源县| 安化县| 巴东县|