Java基礎總結之網路程式設計
阿新 • • 發佈:2018-11-09
網路程式設計:用Java語言實現計算機間資料的資訊傳遞和資源共享。
網路模型:七層:(從上至下)分別是:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層。
網路程式設計的三要素:ip、埠、協議
ip:網路中計算機的唯一標識。Ip在計算機底層是由二進位制所表示的,但是為了方便,人們用“點分十進位制”(將二進位制檔案做換為十進位制,再用.分開)表示IP。Ip地址的組成:網路號+主機號。如何檢視自己的ip:ipconfig。如何測試IP通不通:ping
幾個特殊的IP地址:127.0.0.1 迴環地址(表示本機) x.x.x.255廣播地址 x.x.x.0網路地址
埠:是應用程式的標識,範圍為0--65535.
協議:UDP和TCP
UDP:資料打包,有限制,不連線,效率高,不可靠
TCP:建立資料通道,無限制,效率低,可靠
Socket機制:
A:通訊的兩端都應該有Socket物件
B:所有的通訊都是通過Socket間的IO進行操作的
UDP協議傳送和接收資料:
傳送:建立UDP傳送端的Socket物件---建立資料並把資料打包---傳送資料---釋放資源
接收:建立UDP接收端的Socket物件---建立資料包用於接收資料---接收資料---解析資料包---釋放資源
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; /* *UDP協議傳送資料 *A:建立傳送端socket *B:建立資料,並把資料打包 *C:呼叫Socket的方法傳送資料包 *D:釋放資源 */ public class Send { public static void main(String[] args) throws IOException { // 建立傳送端 socket DatagramSocket ds = new DatagramSocket(); // 建立資料,並把資料打包,包的值最大64K byte[] buf = "UDP簡單應用".getBytes(); // InetAddress address=InetAddress.getByName("192.168.31.233"); DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.31.233"), 12306); // 傳送資料 ds.send(dp); // 釋放資源 ds.close(); } }
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * UDP協議接收資料 A:建立接收端socket B:建立一個數據包(接收容器) C:呼叫Socket的接收方法接收資料包 D:解析資料包並顯示在資料臺 * E:釋放資源 */ public class Receive { public static void main(String[] args) throws IOException { // 建立接收端Socket物件 DatagramSocket ds = new DatagramSocket(12306); // 建立資料包(接收容器) byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); // 呼叫Socket的接收方法接收資料包 ds.receive(dp); // 解析資料包 System.out.println( "From" + dp.getAddress().getHostAddress() + "的資料:" + new String(dp.getData(), 0, dp.getLength())); // 釋放資源 ds.close(); } }
TCP協議傳送和接收資料:
傳送:建立TCP客戶端的Socke物件---獲取輸出流,寫資料---釋放資源
接收:建立TCP伺服器端的Socket物件---見聽客戶端連線---獲取輸入流,讀資料---釋放資源
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {//客戶端
public static void main(String[] args) throws IOException {
// 建立Socket物件
Socket s = new Socket("192.168.31.233", 2080);
// 得到輸出流,進行寫資料
OutputStream os = s.getOutputStream();
os.write("Is-Me-HL".getBytes());
// 釋放資源
s.close();
}
}
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {//伺服器端
public static void main(String[] args) throws IOException {
// 建立ServerSocket物件
ServerSocket ss = new ServerSocket(2080);
// 監聽客戶端,返回一個對應的Socket物件
Socket s = ss.accept();
// 得到輸入流物件
InputStream is = s.getInputStream();
// 列印資訊
byte[] bys = new byte[1024];
int len = is.read(bys);
String message = new String(bys, 0, len);
System.out.println(message);
// 關閉資源
ss.close();
}
}
上面是對UDP和TCP協議的簡單使用做一個基礎的總結,實際上我們可以結合多執行緒的知識,完成更為人性化,使用者體驗感倍增的網路程式。
注:以上文章僅是個人學習過程總結,若有不當之處,望不吝賜教。