1. 程式人生 > >JAVA基礎_網路程式設計

JAVA基礎_網路程式設計

        IP地址:InetAddress類;

        public static InetAddress getLocalHost()throws UnknownHostException返回本地主機。//通過次方法獲得IP地址:

        public String getHostName()獲取此 IP 地址的主機名。

        public String getHostAddress()返回 IP 地址字串(以文字表現形式)。

        public static InetAddress[] getAllByName(String host)throws UnknownHostException

在給定主機名的情況下,根據系統上配置的名稱服務返回其 IP 地址所組成的陣列。       

public class IpDemo {

public static void main(String[] args) throws UnknownHostException {

InetAddress i = InetAddress.getLocalHost();

System.out.println(i.toString());

String name = i.getHostName();

System.out.println(name);

String address = i.getHostAddress();

System.out.println(address);

InetAddress ine = InetAddress.getByName("www.baidu.com");

System.out.println(ine.getHostName());

System.out.println(ine.getHostAddress());

InetAddress[] name2 = InetAddress.getAllByName("www.baidu.com");

for (InetAddress in : name2) {

System.out.println(in.getHostName());

System.out.println(in.getHostAddress());

}

}

}      

            Socket類:

            |--UDP的Socket服務:

                使用的類是:DatagramSocket和DatagramPacket         

/*

* 需求:通過UDP傳輸方式將一段文字傳送出去;

* 傳送端思路:

* 1、建立udpsocket服務

* 2、提供資料,並將資料封裝到資料包

* 3、通過Socket服務的傳送功能,將資料包傳送出去。

* 4、關閉資源

*/

public class SendDemo {

public static void main(String[] args) throws Exception{

//1、建立UDP服務,通過DategramSocket物件

DatagramSocket ds  = new DatagramSocket(8888);

//2、確定資料,並封裝成資料包

//DatagramPacket類下的:public DatagramPacket(byte[] buf,int length,InetAddress address,int port)

//構造資料報包,用來將長度為 length 的包傳送到指定主機上的指定埠號。length 引數必須小於等於 buf.length。

byte[] buf = "UDP ge men lai le ".getBytes();

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);

//3、通過Socket服務,將已有的資料包傳送出去,通過send方法:

//DategramSocket類下的:public void send(DatagramPacket p)throws IOException從此套接字傳送資料報包。

ds.send(dp);

//4、關閉資源

ds.close();

}

}

  /*

* 需求:定義一個應用程式,用於接受UDP協議傳送的資料

* 在定義UDP的接受端

* 接受端思路:

* 1、定義UDPSocket服務,通常會監聽一個埠,其實就是給這個接受網路應用程式定義數字標識,

* 方便於明確那些資料過來,該應用程式可以處理。

* 2、定義一個數據包,因為要儲存接收到的位元組資料。

*   因為資料包物件中有更多的功能可以提取位元組資料中的不同資訊

* 3、通過socket服務的receive方法將收到的資料存入已經定義好的資料包中。

* 4、通過資料包物件的特有功能,將這些不同的資料取出,並進行進一步操作。

*/

public class ReiveceDemo {

public static void main(String[] args) throws Exception{

//1、建立UDPScoket服務,建立端點,並監聽傳送的埠

DatagramSocket ds = new DatagramSocket(10000);

//2、定義資料包,用於儲存資料

//DatagramPacket類中的:public DatagramPacket(byte[] buf,int length)構造 DatagramPacket,用來接收長度為 length 的資料包。

byte[] buf = new byte[1024];

DatagramPacket dp = new DatagramPacket(buf,buf.length);

//3、通過socket服務的receive方法將收到的資料存入資料包

//DatagramSocket類中的:public void receive(DatagramPacket p)throws IOException從此套接字接收資料報包

ds.receive(dp);//阻塞式方法

//4、通過資料包的方法獲取資料

/*

* DatagramPacket類中的普通方法:

* public InetAddress getAddress()返回某臺機器的 IP 地址,此資料報將要發往該機器或者是從該機器接收到的。

* public byte[] getData()返回資料緩衝區。

* public int getLength()返回將要傳送或接收到的資料的長度。

* public int getPort()返回某臺遠端主機的埠號,

* public void setAddress(InetAddress iaddr)設定要將此資料報發往的那臺機器的 IP 地址。

* public void setPort(int iport)設定要將此資料報發往的遠端主機上的埠號。

* public void setPort(int iport)設定要將此資料報發往的遠端主機上的埠號。

*/

//獲取IP地址

//獲取資料

String s = new String(dp.getData(),0,dp.getLength());

//獲取傳送端的埠號

int port = dp.getPort();

System.out.println(address+":"+port+":"+s);

ds.close();

}

}

        |--TCP服務

            所使用的類有:Socket和ServerSocket

/*

* TCP傳送資料

* 1、tcp分客戶端和服務端

* 2、客戶端對應的是Socket

* 服務端對應的是ServerSocket

*

* 客戶端:

* 通過查閱Socket物件,發現子啊該物件建立時,流可以連結指定的主機

* 因為tcp是面向連結的,所以在建立socket服務時,

* 就要有服務端存在,並連線成功。形成通路後,在該通道進行資料傳輸

*

* 需求: 給服務端傳送一個文字資料

* 步驟:

* 1、建立socket服務,並指定要連線的主機和埠

* 2、獲取Socket流中的輸出流。將資料寫到該流中。通過網路傳送給服務端

* 3、獲取Socket流中的輸入流,將服務端反饋的資料獲取到,並進一步處理

* 4、關閉客戶端資源。

*/

public class ClientDemo {

public static void main(String[] args) throws Exception{

//建立客戶端的socket服務,並指定連線的主機和埠

Socket s  = new Socket("127.0.0.1",10003);

OutputStream out = s.getOutputStream();

out.write("tcp ge men lai le".getBytes());

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

System.out.println(new String(buf,0,len));

s.close();

}

}

/*

* 需求:定義端點接受資料並列印在控制檯上

* 服務端:

* 1、建立服務端的socket服務,ServerSocket();

* 並監聽一個埠

* 2、獲取連線過來的客戶端物件,通過ServerSocket的accept()方法

* 3、客戶端如果發過來資料,那麼服務端要使用對應的客戶端物件,並獲取該客戶端物件的

* 讀取流來讀取發過來的資料,並進行進一步操作

* 4、關閉服務端(可選操作)

*/

public class ServerDemo {

public static void main(String[] args) throws Exception{

//建立服務端的Socket服務並監聽一個埠

ServerSocket ss = new ServerSocket(10003);

//通過accept方法獲取連結過來的客戶端物件

Socket s = ss.accept();

InetAddress address = s.getInetAddress();

String hostAddress = address.getHostAddress();

System.out.print(hostAddress+":");

//獲取客戶端傳送過來的資料,服務端使用客戶端物件的讀取流來讀取資料

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len  = in.read(buf);

System.out.println(new String(buf,0,len));

out.write("已收到資訊。".getBytes());

s.close();//關閉客戶端

ss.close();//可選操作

}

}