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
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();//可選操作
}
}