Java 網路程式設計簡單實現
阿新 • • 發佈:2019-02-16
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();
}
}
}