java網絡編程 初學者進
對於網絡編程,首先你要了解網絡基礎知識,我先介紹幾個,就不詳細介紹了
通信協議:計算機網絡中實現通信必須有一些約定,即通信協議。對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標准。
TCP協議:提供可靠的數據傳輸服務的規則。
IP協議進行IP數據包的分割和組裝。
IP地址:為實現網絡中不同的計算機之間的通信,在網絡中的每台機器都必須有一個與眾不同的標識,這就是IP地址(IP Address)。
端口:一個16位的整數,用於表示數據交給哪個通信程序處理。
OSI模型
→→→→→→
↓應 用 層 ↓
→→→→→→
↓表 示 層 ↓
→→→→→→
↓會 話 層 ↓
→→→→→→
↓傳 輸 層 ↓→→→→→TCP
→→→→→→
↓網 絡 層 ↓→→→→→IP
→→→→→→
↓數據鏈路層 ↓
→→→→→→
↓物 理 層 ↓
→→→→→→
JDK中為開發網絡應用程序提供了java.net包,該包下的類和接口幾乎都是為網絡編程服務的。
InetAddress:用於描述IP地址的對象
有2個靜態變方法獲取InetAddress實例
getByName(String host):根據主機獲取對應的InetAddress
getByAddress(byte[] addr):根據原始IP來獲取InetAddress
●先來說下UDP 比如聊天用的ICQ和OICQ就是使用的UDP協議。
使用位於JDK中Java.net包下的DatagramSocket可以非常方便地控制用戶數據報文。
DatagramSocket類:創建接收和發送UDP的Socket實例。
DatagramSocket():創建實例。通常用於客戶端編程,它並沒有特定監聽的端口,僅僅使用一個臨時的。
DatagramSocket(int port):創建實例,並固定監聽Port端口的報文。
receive(DatagramPacket d):接收數據報文到d中。receive方法產生一個“阻塞”。
send(DatagramPacket d):發送報文d到目的地。
close():關閉DatagramSocket。在應用程序退出的時候,通常會主動釋放資源,關閉Socket。
實例1,編寫程序演示使用UDP協議數據報的發送和接受。
發送端
建立udpsocket服務端點。該端點建立,系統會隨機分配一個端口。如果不想隨機配置,可以手動指定。 DatagramSocket ds = new
DatagramSocket(9002);
將數據進行packet包的封裝,必須要指定目的地地址和端口。 byte[] buf = "wo shi shu ju".getBytes(); DatagramPacket dp =new
DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9001);
通過socket服務的send方法將該包發出。 ds.send(dp);
將socket服務關閉。主要是關閉資源。 ds.close();
代碼
package com.csdn.net;
import java.io.*;
import java.net.*;
public class SendDemo {
/**
* @param args
*/
public static void main(String[] args) {
DatagramSocket ds=null;
try {
ds=new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null){
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName
("192.168.49.66"),9009);
ds.send(dp);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
ds.close();
}
}
}
接收端
建立udp的socket服務。要監聽一個端口。 DatagramSocket ds = new DatagramSocket(9001);
定義一個緩沖區,將該緩沖區封裝到packet包中。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket
(buf,buf.length);
通過socket的receive方法將數據存入數據包中。 ds.receive(dp);
通過數據包dp的方法getData()、getAddress()、getPort()等方法獲取包中的指定信息。
關閉socket。 ds.close();
代碼
package com.hbsi.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//接收端
public class ReceiveDemo {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
//1.建立udpsocket
DatagramSocket ds=new DatagramSocket(9009);
//2.建立一個數據包來接收數據
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//3.接收
ds.receive(dp);
//4.通過數據包對象的方法獲取數據
String ip=dp.getAddress().getHostAddress();//get Ip
String data=new String(dp.getData(),0,dp.getLength());//獲取收到的內容
int port=dp.getPort();//get端口
System.out.println(ip+":"+data+":"+port);
//5關閉
ds.close();
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。