Java的Socket编程实例
生活随笔
收集整理的這篇文章主要介紹了
Java的Socket编程实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
socket簡介
套接字(socket)是一個抽象層,應用程序可以通過它發送或接收數據,可對其進行像對文件一樣的打開、讀寫和關閉等操作。套接字允許應用程序將I/O插入到網絡中,并與網絡中的其他應用程序進行通信。
代碼解釋
Socket編程可以使用 TCP協議,也可以使用UDP協議,我這里使用的是TCP協議的代碼,運行的時候先運行服務器端,再運行客戶端。
服務端
package org.somken.test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Calendar;/*** 服務器端*author 周謙 */public class SocketSServer { public static void main(String[] args) throws IOException { System.out.println("服務器開始運行...\n"); //創建偵聽傳入連接的服務器套接字//端口10000上的請求。 ServerSocket server = new ServerSocket(10000); while (true) { //偵聽來自客戶端的傳入連接請求//programs,建立連接,返回socket//表示此連接的對象。Socket s = server.accept(); System.out.println("接受連接中...\n"); //啟動一個線程來處理連接。 new ServerThread(s).start(); } } } class ServerThread extends Thread { private Socket s; ServerThread(Socket s) { this.s = s; } public void run() { BufferedReader br = null; PrintWriter pw = null; try { //創建一個鏈接到套接字的輸入流讀取器//面向字節的輸入流。輸入流讀取器//將從套接字讀取的字節轉換為字符。這個//轉換基于平臺的默認字符//設置。InputStreamReader isr; isr = new InputStreamReader(s.getInputStream()); //創建一個鏈接到輸入流的緩沖讀取器 br = new BufferedReader(isr); /*創建一個鏈接到套接字面向字節的輸出流的打印寫入程序。打印作者創建將發送到套接字的字符轉換為字節的中間輸出流編寫器。轉換基于平臺的默認字符集。 */pw = new PrintWriter(s.getOutputStream(), true); //創建可以獲取日期和時間信息的日歷。 Calendar c = Calendar.getInstance(); do { //獲取客戶端程序的下一個命令。 String cmd = br.readLine(); // 如果客戶端程序已關閉其輸出流,則退出。 if (cmd == null) break; //將命令轉換為大寫,以便于比較。cmd = cmd.toUpperCase(); // 如果客戶端程序發送bye命令,則終止。 if (cmd.startsWith("BYE")) break; // 如果客戶端程序發送日期或時間命令,則將當前日期/時間返回給客戶端程序。if (cmd.startsWith("DATE") || cmd.startsWith("TIME")) pw.println(c.getTime().toString()); //如果客戶端程序發送dom(月日)命令,則將當前月日返回給客戶端程序。 if (cmd.startsWith("DOM")) pw.println("" + c.get(Calendar.DAY_OF_MONTH)); // 如果客戶端程序發送dow(星期幾)命令,//則將當前工作日(作為字符串)返回給客戶端程序。if (cmd.startsWith("DOW")) switch (c.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: pw.println("SUNDAY"); break; case Calendar.MONDAY: pw.println("MONDAY"); break; case Calendar.TUESDAY: pw.println("TUESDAY"); break; case Calendar.WEDNESDAY: pw.println("WEDNESDAY"); break; case Calendar.THURSDAY: pw.println("THURSDAY"); break; case Calendar.FRIDAY: pw.println("FRIDAY"); break; case Calendar.SATURDAY: pw.println("SATURDAY"); } // 如果客戶端程序發送doy(一年中的某一天)命令,則將當前的一年中的某一天返回給客戶端程序 if (cmd.startsWith("DOY")) pw.println("" + c.get(Calendar.DAY_OF_YEAR)); // 如果客戶端程序發送暫停命令,則睡眠3秒鐘。if (cmd.startsWith("PAUSE")) try { Thread.sleep(3000); } catch (InterruptedException e) { } } while (true); } catch (IOException e) { System.out.println(e.toString()); } finally { System.out.println("關閉連接...\n"); try { if (br != null) br.close(); if (pw != null) pw.close(); if (s != null) s.close(); } catch (IOException e) { } } } }客戶端代碼
package org.somken.test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket;/**author 周謙 */public class SocketSClient { public static void main(String[] args) { String host = "localhost"; // 如果用戶指定命令行參數,則該參數表示主機名。 if (args.length == 1) host = args[0]; BufferedReader br = null; PrintWriter pw = null; Socket s = null; try { //創建一個套接字,嘗試連接到位于端口10000的主機上的服務器程序。 s = new Socket(host, 10000); InputStreamReader isr; isr = new InputStreamReader(s.getInputStream()); br = new BufferedReader(isr); pw = new PrintWriter(s.getOutputStream(), true); // 向服務器發送日期命令。pw.println("DATE"); // 獲取并打印當前日期/時間。System.out.println(br.readLine()); // 向服務器發送暫停命令。這允許多個客戶端啟動并驗證服務器是否正在生成多個線程。pw.println("PAUSE"); // 向服務器發送dow命令。pw.println("DOW"); // 獲取并打印當前星期幾。System.out.println(br.readLine()); // 將dom命令發送到服務器。pw.println("DOM"); // 獲取并打印當前月份的日期。System.out.println(br.readLine()); // 將doy命令發送到服務器。pw.println("DOY"); // 獲取并打印當前日期。System.out.println(br.readLine()); } catch (IOException e) { System.out.println(e.toString()); } finally { try { if (br != null) br.close(); if (pw != null) pw.close(); if (s != null) s.close(); } catch (IOException e) { } } } }代碼就到這里了。
總結
以上是生活随笔為你收集整理的Java的Socket编程实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 首次公开专利并且专利数量最多公司(202
- 下一篇: jdk6-jdk9常用版本下载地址整理