1. 程式人生 > >Java Socket程式設計基礎

Java Socket程式設計基礎

1.簡述:

Java Socket程式設計時對於TCP/IP 協議層的通訊進行封裝,簡化了相關的一些操作。//待續

2.Socket 通訊時序圖

 

  3.Socket 資料流的互動

4.單客戶端和伺服器通訊的簡單例子:

伺服器端程式碼:

[java] view plain copy  print?
  1. package com.lou.socket;  
  2. import java.io.BufferedReader;  
  3. import java.io.IOException;  
  4. import java.io.InputStreamReader;  
  5. import java.io.PrintWriter;  
  6. import java.net.InetSocketAddress;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9. publicclass TestServer {  
  10. publicstaticvoid main(String[] args) throws IOException {  
  11.     //1.建立一個Server Socket
  12.     ServerSocket server = new ServerSocket();  
  13.     // 2.繫結監聽指定的埠
  14.     InetSocketAddress address = new InetSocketAddress("localhost",18824);  
  15.     server.bind(address);  
  16.     // 3.接受此埠的通訊請求
  17.     Socket socket = server.accept();  
  18.     // 在沒有客戶端對其進行相應前,下面的程式碼不會執行,將一直阻塞
  19.     //伺服器端的輸出流和輸入流獲取
  20.     BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  21.     PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);  
  22.     //來自鍵盤的輸入資料
  23.     BufferedReader keyword=new BufferedReader(new InputStreamReader(System.in));  
  24.     while(true)  
  25.     {  
  26.         if(reader.ready())  
  27.         {  
  28.             // 捕捉來自客戶端發來的訊息     客戶端沒有發訊息過來時,reader.ready() 為false, 迴圈檢測是否有資料,有測打印出來
  29.             String info = reader.readLine();  
  30.             System.out.println("Client:"+info);  
  31.         }  
  32.         if(keyword.ready())  
  33.         {  
  34.             //捕獲來自伺服器端另外一個輸入流 : 鍵盤的資料。如果有資料,則傳送給客戶端
  35.             String  test = keyword.readLine();  
  36.             writer.println(test);  
  37.             System.out.println("Server:"+test);  
  38.         }  
  39.     }  
  40. }  
  41. }  


客戶端程式碼:

[java] view plain copy  print?
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.io.PrintWriter;  
  5. import java.net.InetSocketAddress;  
  6. import java.net.Socket;  
  7. import java.net.UnknownHostException;  
  8. publicclass ClientSocket {  
  9.     publicstaticvoid main(String[] args) throws UnknownHostException, IOException {  
  10.         //1.建立一個Server Socket
  11.         Socket socket = new Socket();  
  12.         // 2.連線到指定的 server socket,指定IP 和埠號
  13.         InetSocketAddress address = new InetSocketAddress("localhost",18824);  
  14.         socket.connect(address);  
  15.         // 3.連線成功後,獲取相應的輸入輸出流,進行資料互動
  16.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  17.         PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);  
  18.         BufferedReader keyword=new BufferedReader(new InputStreamReader(System.in));  
  19.         while(true)  
  20.         {  
  21.             // 捕捉來自伺服器端發來的訊息   伺服器端沒有發訊息過來時,br.ready() 為false, 迴圈檢測是否有資料,有測打印出來
  22.             if(br.ready())  
  23.             {  
  24.                 String info = br.readLine();  
  25.                 System.out.println("Server:"+info);  
  26.             }  
  27.             //捕獲來自伺服器端另外一個輸入流 : 鍵盤的資料。如果有資料,則傳送給伺服器端
  28.             if(keyword.ready())  
  29.             {  
  30.                 String  test = keyword.readLine();  
  31.                 pw.println(test);  
  32.                 System.out.println("Client:"+test);  
  33.             }  
  34.         }  
  35.     }  
  36. }  


 執行結果:

 

5.Socket 多客戶端單伺服器之間的通訊:

       上面的這個例子只能支援一個伺服器端和一個客戶端的通訊,因為 客戶端內 server.accept() 方法只執行了一次,只能返回一個Socket 連線。可以在服務端接受多個Socket,這時候的Socket應當放在一個執行緒裡,讓它有生命週期,來使用客戶端和服務端的自由通訊。

[java] view plain copy  print?
  1. package com.lou.socket;  
  2. import java.io.IOException;  
  3. import java.net.InetSocketAddress;  
  4. import java.net.ServerSocket;  
  5. import java.net.Socket;  
  6. publicclass TestServer {  
  7. publicstaticvoid main(String[] args) throws IOException {  
  8.     //1.建立一個Server Socket
  9.     ServerSocket server = new ServerSocket();  
  10. 相關推薦

    SocketJava Socket程式設計基礎及深入講解

    Socket是Java網路程式設計的基礎,瞭解還是有好處的,   這篇文章主要講解Socket的基礎程式設計。Socket用在哪呢,主要用在程序間,網路間通訊。本篇比較長,特別做了個目錄: 一、Socket通訊基本示例   這種模式是基礎,必須掌

    JAVA Socket程式設計基礎(轉載)

     Java Socket程式設計 對於Java Socket程式設計而言,有兩個概念,一個是ServerSocket,一個是Socket。服務端和客戶端之間通過Socket建立連線,之後它們就可以進行通訊了。首先ServerSocket將在服務端監聽某個埠,當發現客

    Java Socket程式設計基礎

    1.簡述: Java Socket程式設計時對於TCP/IP 協議層的通訊進行封裝,簡化了相關的一些操作。//待續 2.Socket 通訊時序圖     3.Socket 資料流的互動 4.單客戶端和伺服器通訊的簡單例子:

    SocketJava Socket程式設計基礎及深入講解(轉載)

    Socket是Java網路程式設計的基礎,瞭解還是有好處的,   這篇文章主要講解Socket的基礎程式設計。Socket用在哪呢,主要用在程序間,網路間通訊。本篇比較長,特別做了個目錄: 一、Socket通訊基本示例   這種模式是基礎,必須掌握,後

    Java基本程式設計——基礎語法

    1.資料型別 1.1資料型別分為兩種:基本資料型別和引用資料型別 1.1—1 基本資料型別有8種:  四種整型(byte,int , short , long)  兩種浮點型(float,double)  一種字元型(char) 1.1—2 引用資料型別 :類(class),介面(i

    Java網路程式設計基礎部分

    轉載:文章來源 網路通訊協議 網路通訊協議有很多種,目前應用最廣泛的是TCP/IP協議(Transmission Control Protocal/Internet Protoal傳輸控制協議/英特網互聯協議),它是一個包括TCP協議和IP協議,UDP(User Datagram Protoco

    java Socket程式設計呼叫ServerSocket的close方法

    做一個簡單的聊天系統伺服器 伺服器中有一個輸入埠的控制元件,兩個JButton按鈕“停止”和“執行” 點選“執行”按鈕,啟動伺服器 點選“停止”按鈕,呼叫ServerSocket的close方法,停止伺服器。 上部分程式碼:   btn_ok.setText(

    第2章 java並行程式設計基礎知識清單

    2.2、初始執行緒:執行緒的基本操作 1、程序執行緒區別。P29 2、執行緒生命週期,waiting, time_waiting狀態區別:new, runnable, blocked, waiting, time_waiting, terminated。P31,32 3、start()方

    java Socket程式設計之TCP基本原理

    通訊原理: 1.伺服器程式建立一個ServerSocket,呼叫accept方法等待客戶機來連線。 2.客戶端程式建立一個Socket,請求與伺服器建立連線。 3.伺服器接收客戶機的連線請求,同時建立一個新的Socket與客戶端建立連線。伺服器繼續等待新的請求。 關鍵類: ServerS

    linux下socket程式設計基礎示例

    本文主要用於記錄(因為有道雲容易丟失資料),程式碼並不規範,所有的內容都解除安裝main()函式裡面了,主要目的是為了方便自己理清流程。 服務端的程式碼: #include<unistd.h> #include<sys/types.h> #incl

    java網路程式設計基礎

    1.netstat -ano    檢視當前計算機所有協議的通訊狀態,包括協議名,當前計算機地址,其他計算機的地址,狀態:PID 2.netstat -ano | findstr 埠號    檢視對應的埠號是否被佔用,如果沒有佔用,沒有訊息輸出,如果有訊息輸出,代表該埠被佔用

    併發-Java併發程式設計基礎

    Java併發程式設計基礎 併發 在電腦科學中,併發是指將一個程式,演算法劃分為若干個邏輯組成部分,這些部分可以以任何順序進行執行,但與最終順序執行的結果一致。併發可以在多核作業系統上顯著的提高程式執行速度。 併發與並行聯絡與區別 這裡參考ErLang之父的解釋,ErLang之父談到了如何向一個5歲小孩解釋併發

    Java網路程式設計基礎

    一、前言 網路通訊在系統互動中是必不可少的一部分,無論是面試還是工作中都是繞不過去的一部分,本節我們來談談Java網路程式設計中的一些知識,本chat內容如下: 網路通訊基礎知識,剖析網路通訊的本質和需要注意的點 使用Java BIO阻塞套接字 實現簡單TCP

    Java併發程式設計的藝術》第4章 Java併發程式設計基礎

    Java誕生時就選擇了內建對多執行緒的支援 作業系統執行一個程式時,會為其建立一個程序。 執行緒是作業系統排程的最小單元,都有各自的計數器、堆疊、區域性變數。能訪問共享的記憶體變數。CPU在他們上高速切換,讓人感覺在同步執行。 執行緒會被分到若干時間片,時間片用

    Java語言程式設計基礎篇 day01

    第1章 計算機程式和Java概述 1.1 什麼是計算機   計算機包括硬體(hardware)和軟體(software)兩部分,一般來說硬體包括計算機中可以看見的部分,而軟體提供看不見的指令,這些指令控制硬體並且使得硬體完成特定的任務。一臺計算機中央處理器

    【演算法視覺化】第一章 Java GUI程式設計基礎

    1.1 使用JFrame import javax.swing.*; import java.awt.*; public class Main { public static void main(String[] args) { EventQu

    Java併發程式設計基礎

    4.1 執行緒簡介 4.1.1 什麼是執行緒         現代作業系統在執行一個程式時,會為其建立一個程序。例如,啟動一個Java程式,作業系統就會建立一個Java程序。現代作業系統排程的最小單元是執行緒,也叫輕量級程序(LightWeight Process),在一

    Java網路程式設計——基礎知識

    網路基礎知識 計算機網路提供的功能: 資源共享; 資訊傳輸與集中處理; 均衡負荷與分佈處理; 綜合資訊服務; 通訊協議 實現通訊的約定,負責對傳輸速率、傳輸程式碼、程式碼結構、傳輸控制步驟、出錯控制等制定處理標準。 通訊協議的組成:

    Java併發程式設計基礎//程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行棧和程式計

    1.實現多執行緒的兩種方式: (1)繼承Thread類; (2)實現Runnable介面 //程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行

    Java Socket程式設計(五) 簡單的WEB伺服器

    簡單的WEB伺服器一個簡單的WEB伺服器將由列表9.2這樣構建.當然,還必須要對方法和迴應事件進行改進.簡單的伺服器不會分析和儲存請求頭.新的WEB伺服器將分析和儲存請求,為以後的處理作準備.為了達到這個目的,你必須有一個包含HTTP請求的類.HTTPrequest類列表9.5列出了一個完整的HTTPrequ