日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

23、java中的网编基础

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23、java中的网编基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是網絡編程?

?????? 在說網絡編程之前要先知道什么是網絡,網絡是一種實現資源共享和數據傳輸的系統。而網絡編程就是使用代碼編寫程序來進行網絡之間數據的傳輸。使用java進行網絡之間數據的傳輸是比較簡單的,java中提供了一些現成的類供我們使用,其實這一塊也沒什么好理解的,記住就可以了,這里只是簡單介紹一下網絡之間進行數據傳輸的方式和如何使用java中提供類進行編程。

如何進行數據的傳輸?

?????? 假如有兩臺機器服務器A和客戶端B需要進行數據傳輸,首先,想到的問題應該是如何確定這兩臺機器。在網絡中每一個機器都使用一個ip地址作為自己的唯一標識,所以首先應該確認機器的ip地址,接著,客戶端B將信息發送到了服務器A,這是服務器中的哪個應用去接收處理客戶端發來的信息呢?每一臺機器中有65535個端口, 每一個端口對應著一個應用程序,所以還要指定端口(port)來告訴服務器將信息發送到哪個應用中進行處理。
? ? ?? 這里可能有一個疑問,數據是如何由客戶端發送到服務器的呢?
?????? 數據在傳輸時需要遵循特定的協議,這里有兩個協議可供選擇: TCP協議提供面向連接的服務,使用字節流的方式進行傳輸,是有序、可靠傳輸。 UDP協議提供無連接的服務,使用數據包的方式進行傳輸,是不可靠的傳輸。

?java如何實現數據傳輸?

?????? 接下來介紹一下java中的網編實現方式,在java中使用socket套接字來邏輯表示網絡中的結點(客戶端B和服務器A),套接字的兩個基本屬性就是ip和端口。數據進行傳輸時先通過套接字來連接兩個結點,然后使用套接字中提供的數據流來進行數據的傳輸,等到傳輸結束后,則注銷兩個套接字,結束結點之間的通信。
?????? 針對不同協議的數據傳輸,java中提供了不同的實現方式,使用TCP協議進行java進行網絡編程時,由于需要先創建連接,所以必須先開發服務器端,當服務器端沒有開啟時,客戶端訪問會報錯,看一下根據TCP協議進行數據傳輸的例子,代碼如下:
? ? ??

/*** 服務器端**/ public class SocketServer {public static void main(String[] args) {//1.聲明套接字和一系列的流對象ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream = null;OutputStream outputStream = null;try {// 2.構造套接字serverSocket = new ServerSocket(9002);// 3.使服務器處于阻塞狀態,確定可以通信,獲取套接字,等待客戶端發送信息socket = serverSocket.accept();// 4.獲取流對象,讀取流中的信息inputStream = socket.getInputStream();byte []bs = new byte[2048];inputStream.read(bs);System.out.println("接收到客戶端的信息:"+new String(bs,"utf-8"));// 5、禁用套接字中的輸入流socket.shutdownInput();// 6. 反饋信息,往流中寫入數據,供客戶端獲取outputStream = socket.getOutputStream();outputStream.write("我是服務器端".getBytes());socket.shutdownOutput();} catch (IOException e) {e.printStackTrace();} finally {try {if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}socket.close();} catch (IOException e) {e.printStackTrace();}}} }------------------------------------------------------------------/*** 客戶端**/ public class SocketClient {public static void main(String[] args) {// 1.創建客戶端套接字和用于獲取數據流對象Socket socket = null;InputStream in = null;OutputStream out = null;try {// 2.構造套接字,用于連接服務器端socket = new Socket("127.0.0.1", 9002);// 3.創建與服務器之間的數據連接流,往服務器端發送數據out = socket.getOutputStream();String message = "我是客戶端";out.write(message.getBytes());socket.shutdownOutput();// 4.獲取與服務器之間的數據連接流,獲取到服務器返回的信息byte []b = new byte[2048];in = socket.getInputStream();in.read(b);System.out.println("接收到服務端的信息:"+new String(b,"utf-8"));socket.shutdownInput();} catch (Exception e) {// TODO: handle exception} finally {try {if (in != null) {in.close();}if (out != null) {out.close();}socket.close();} catch (IOException e) {e.printStackTrace();}}} }

?????? 上邊這是一個服務器對應要給客戶端,當多個客戶端訪問一臺服務器時,使用多線程即可,每來一個客戶端就創建一個新線程,創建一個新的套接字。

??????? 當使用UDP協議進行java開發時,服務器端不需要一定開啟,客戶端發送信息,不會管服務器是否接受成功了,看一下使用UDP協議進行數據傳輸的例子,代碼如下:

/*** 服務器端 */ public class Recive {public static void main(String[] args) {// 1.創建數據報包套接字DatagramSocket socket = null;// 2.創建數據包DatagramPacket dpGet = null;DatagramPacket dpSend = null;try {// 3.構造一個數據包byte[] b = new byte[2048];dpGet = new DatagramPacket(b, b.length);// 4.構造套接字,并開啟服務器,等待接受數據包socket = new DatagramSocket(9002);socket.receive(dpGet);//服務器阻塞,等待訪問System.out.println("接受到客戶端的信息:"+new String(b));// 5.從包中獲取到客戶端的套接字地址信息,并返回客戶端信息SocketAddress socketAddress = dpGet.getSocketAddress();byte[] sendData = "這是服務器返回的信息".getBytes();dpSend = new DatagramPacket(sendData, sendData.length, socketAddress);socket.send(dpSend);} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {socket.close();}} }-----------------------------------------------------/*** 客戶端 */ public class Send {public static void main(String[] args) {// 1.聲明數據報包套接字DatagramSocket socket = null;// 2.聲明數據庫報包DatagramPacket dp = null;try {// 4.構建套接字socket = new DatagramSocket();// 5.構建發送包byte[] bytes = "客戶端發送的信息".getBytes();dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("localhost"), 9002);// 6.發送數據報包socket.send(dp);} catch (UnknownHostException e) {e.printStackTrace();} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 釋放資源socket.close();}} }

?

總結

以上是生活随笔為你收集整理的23、java中的网编基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。