歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

基於Socket的Java網絡編程

今天主要學習一點基於socket通信的java網絡編程的基本原理和例子:

要想實現網絡中的通信我們需要借助socket,即我們需要知道IP地址和應用進程的端口號,再利用相關的協議、借助物理介質的傳送,這就是實現網絡傳輸的基本。

所以,對於網絡編程而言,socket起著關鍵作用,我們直接看下面的代碼,分別是服務器端和客戶端的程序,這是最簡單、單線程的通訊的網絡編程的例子,但是它卻體現了基本的原理。

package SocketTest;
/*
 * 服務器端程序
 */
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class MyServer{
    public static void main(String[] args) throws Exception{
    // 啟動一個服務端 端口號:0-65535 1024以下不建議使用。
        System.out.println("*********服務器***********");
        ServerSocket ss = new ServerSocket(8899);
        // 這是一個阻塞的操作,等待客戶端連接
        Socket s = ss.accept();
        System.out.println("一個客戶端連接上來了");
        //利用包裝流實現聽筒
        InputStream is = s.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        //利用包裝流實現話筒
        OutputStream os = s.getOutputStream();
        PrintStream ps = new PrintStream(os);
                                           
        //定義一個Boolean型的標志位,可以使while(true)循環騙過編譯器
        boolean flag = true;
        Scanner scan = new Scanner(System.in);
        while(flag){
            String str = br.readLine();//聽話
            System.out.println("客戶端說:"+str);
            ps.println(scan.next());// 說話
                                               
        }
        //記得關閉包裝流和socket
        s.close();
        br.close();
        ps.close();
        ss.close();
    }
}

 

package SocketTest;
/*
 * 客戶端
 */
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class MyClient {
    public static void main(String[] args) throws Exception{
    //  啟動一個客戶端。
    System.out.println("*********客戶端***********");
        Socket s = new Socket("127.0.0.1",8899);
        //包裝流:話筒
        OutputStream os = s.getOutputStream();
        PrintStream ps = new PrintStream(os);     
        // 輸入流:聽筒
        InputStream is = s.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                                               
        boolean flag = true;
        Scanner scan = new Scanner(System.in);
        while(flag){
            ps.println(scan.next());
            System.out.println("服務器說:"+br.readLine());
        }
                ps.close();
        br.close();
        os.close();
        s.close();
    }
}

接下來我們運行這兩個程序,注意:一定要先運行服務器端來監聽等待客戶端的連接,再運行客戶端。
運行結果:

服務器:

客戶端:

Copyright © Linux教程網 All Rights Reserved