網(wǎng)絡(luò)編程

一、InetAddress

java.net包下,此類表示互聯(lián)網(wǎng)協(xié)議(IP)地址

static InetAddress getByName(String host)//根據(jù)主機(jī)名或者IP地址獲取相關(guān)信息

關(guān)鍵在于如何獲取InetAddress對象

二、使用UDP協(xié)議發(fā)送對象

1.創(chuàng)建發(fā)送端Socket對象

DatagramSocket:此類用來發(fā)送和接受數(shù)據(jù)報包的套接字,基于UDP協(xié)議

(1)DatagramSocket():創(chuàng)建Socket對象并隨機(jī)分配端口號

DatagramSocket ds = new DatagramSocket();

(2)DatagramSocket(int port ):創(chuàng)建Socket對象并指定端口號

2.創(chuàng)建數(shù)據(jù)并打包

DatagramPacket:此類表示數(shù)據(jù)報包

數(shù)據(jù)byte[]

設(shè)備地址IP

進(jìn)程的地址:端口號

DatagramPacket(byte[] buf,int length,InetAddress address,int port)

3.發(fā)送數(shù)據(jù)

ds.send(p);

4.釋放資源

ds.close();

三、UDP接收數(shù)據(jù)

1.創(chuàng)建接收端Socket對象

DatagramSocket ds = new DatagramSocket(8888);

2.接收數(shù)據(jù)

byte[] bys = new byte[1024];

DatagramPacket dp = new DatagramPcket(bys,bys.length);

ds.receive(dp);//阻塞

3.解析數(shù)據(jù)

//InetAddress getAddress():獲取發(fā)送端的IP對象

InetAddress address = dp.getAddress();

//byte[] getData():獲取接收到的數(shù)據(jù),也可以直接創(chuàng)建包對象時的數(shù)組

byte[] data = dp.getData();

//int getLength():獲取具體收到的字節(jié)個數(shù)

int length = dp.getLength();

4.輸出數(shù)據(jù)

System.out.println("sender---->" + address.getHostAddress());

System.out.println(new String(data,0,length));

5.釋放資源

dp.close();

UDP協(xié)議收發(fā)數(shù)據(jù)的注意事項: 端口號錯誤,數(shù)據(jù)可以正常發(fā)出,不會出現(xiàn)異常,但是收不到數(shù)據(jù)

四、使用TCP發(fā)送數(shù)據(jù)

1.創(chuàng)建發(fā)送端Socket對象(創(chuàng)建連接)

Java.net.Socket實現(xiàn)客戶端套接字

Socket(InetAddress address,int port)

Socket s = new Socket(InetAddress address,int port)

2.獲取輸出流對象

OutputStream os = s.getOutputStream();

3.發(fā)送數(shù)據(jù)

String str = "hello tcp";

os.write(str.getBytes());

4.釋放資源

s.close();

四、TCP接收端

1.創(chuàng)建接收端Socket對象

Java.net.ServerSocket

ServerSocket(int port);

ServerSocket ss = new ServerSocket(10086);

2.監(jiān)聽(阻塞)

ServerSocket中沒有關(guān)于獲取數(shù)據(jù)的方法

Socket s = ss.accept();

3.接受數(shù)據(jù)

InputStream is = s.getInputStream();

4.獲取數(shù)據(jù)

byte[] bys = new byte[1024];

int len = is.read(bys);

5.輸出數(shù)據(jù)

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

6.釋放資源

s.close();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容