1. 程式人生 > >Java 網路程式設計簡單實現

Java 網路程式設計簡單實現

java 網路程式設計學習筆記

1. 獲取終端資訊

在獲取莫終端資訊時,需要使用InetAddress類的相應方法進行獲取

1.1 獲取本機的網路相關資訊

獲取本機的網路相關資訊時需要使用命令InetAddress.getLocalHost()
獲得InetAddress型別的例項物件引用。
然後,可以使用以下方法獲取需要的資料


.getHostName();//獲取本機名
.getHostAddress();//獲取本機地址
.

2.Socket程式設計

2.1 實現原理:

在進行Socket程式設計之前需要了解C/S(客戶端/伺服器)通訊的實現原理:
首先,需要為伺服器指定埠號,然後,迴圈檢測埠,等待客戶機發出
請求進行連線;同時,客戶端程式需要知道伺服器端的ip和相應通訊程
序的埠號,然後發起連線請求從而進行連線.

通常的網路程式設計往往會涉及到伺服器和客戶機,而在多臺終端進行通訊
時,除了需要知道彼此之間的IP外,還需要知道通訊程式的埠號.

所以在進行Socket程式設計時,需要指定通訊的埠號.

2.2 資訊傳輸

資訊傳輸時使用的資料流一般有兩種:

  • DataInputStream:資料輸入流(相對於當前程式講的,接收的資料通過資料輸入流進行接收)
  • DataOutputStream:資料輸出流(相對於當前程式講的,輸出的資料通過資料輸出流進行輸出)

流物件引用的獲取

  • DataInputStream dis = new DataInputStream(Socket.getInputStream());
  • DataOutputStream dos = new DataOutputStream(Socket.getOutputStream());

流物件的使用:

  • dis.readUTF():讀取流中的資料(dis:DataInputStream 例項物件引用,
    dis的read方法的型別用很多).
  • dos.writeUTF():輸出資訊(dis:DataOutputStream 例項物件引用,
    dos的write方法的型別用很多)。

例項演示:

功能:
伺服器server,客戶端clent,
伺服器將從客戶端接收的資料返回給client

Servlet:
包含三部分:
1.建立套接字和流物件(例項化過程需要使用try-catch塊進行包裹)

  • 套接字包含兩個:
    - 伺服器端套接字
    - 客戶端套接字

  • 流物件包含兩個:
    - 輸入流DataInputStream
    - 輸出流DataOutputStream

2.例項化物件,接收客戶端套接字連續呼叫
3.進行通訊


public class Server {
    public static void main(String args[]){
        ServerSocket server = null;
        Socket client = null;
        DataInputStream dis = null;
        DataOutputStream dos = null;
        try{
            server = new ServerSocket(8888);
            client = server.accept();//接收客戶端套接字連續呼叫
            dis = new DataInputStream(client.getInputStream());
            dos = new DataOutputStream(client.getOutputStream());
            //通訊
            while(true){
                str = in.readUTF();
                dos.writeUTF("hello clients");
                dos.writeUTF("server get client\' info"+str)
                sleep(1000);//執行緒修眠
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

Client客戶端:
1.定義套接字和資料流

  • 套接字:
    - 伺服器端套接字

  • 資料流
    - DataInputStream
    - DataOutputStream
    2.例項化套接字
    3.通訊

public class Client{

    public static void main(String args[]){
        //1
        Socket client = null;
        DataInputStream dis = null;
        DataOutputStream dos = null;

        try{
            //2
            client = new Socket("127.0.0.1",8888);//ip,埠號
            dis = new DataInputStream(client.getInputStream());
            dos = new DataOuputStream(client.getOutputStreams());
            //3
            while(true){
                String server_str = dis.readUTF();
                System.out.println("server:"+server_str);
                dos.writeUTF((int)(Math.random()*10+1)+"");
                sleep(1000);
            }

        }catch(Exception e){
            e.printStackTrace();
        }
    }
}