亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

Java網(wǎng)絡基礎和Socket通信基礎

時間:2025-11-24 01:53:30 java語言

Java網(wǎng)絡基礎和Socket通信基礎

  導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。下面我們來看看Java網(wǎng)絡基礎和Socket通信基礎,希望對大家有所幫助。

  一、網(wǎng)絡基礎

  1、InetAddress

  InetAddress構造器私有,可以通過多種方式獲得inetAddress對象

  InetAddress ip = InetAddress.getLocalHost();/pic/p>

  ip = InetAddress.getByName("100.64.141.89");/pic/p>

  String name = ip.getHostName();/pic/p>

  2、URL統(tǒng)一資源定位符

  典型構成:1、網(wǎng)絡協(xié)議(/pic/myServlet);3、端口號(80);4、資源路徑(crm/index.jsp);5、查詢地址(gid=117)

  /pic/p>

  URL url = new URL(str);

  String protocol = url.getProtocol();/pic/p>

  String host = url.getHost();/pic/p>

  int port = url.getPort();/pic/p>

  對資源文件的一般操作

  String file = url.getFile();/pic/p>

  InputStream is = url.openStream();/pic/p>

  對URL地址進行轉碼,解碼,防止亂碼

  String str1 = URLEncoder.encode(str, "UTF-8");/pic/p>

  String str2 = URLDecoder.decode(str1, "UTF-8");/pic/p>

  3、HttpURLConnection

  繼承URLConnection類;Http協(xié)議簡介 http是一個無狀態(tài)協(xié)議,請求、響應協(xié)議由請求頭和響應頭構成 。

 、僬埱箢^: 請求方法:get post put.....

 、陧憫^ 響應狀態(tài)碼:status code:200(正常響應) 400~(404,405請求資源異常,不存在,請求響應格式不一致) 500~(500服務器內部異常)

  /pic/p>

  String str3 = "/uploadfile/2017/0809/20170809085944351.jpg";

  URL url2 = new URL(str3);

  /pic/p>

  HttpURLConnection conn = (HttpURLConnection) url2.openConnection();/pic/p>

  /pic/p>

  /pic/p>

  /pic/p>

  /pic/pic/p>

  /pic/pic/p>

  /pic/p>

  /pic/pic/p>

  /pic/p>

  /pic/p>

  if (code == HttpURLConnection.HTTP_OK) {

  InputStream is1 = conn.getInputStream();

  FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\Users\lx\Desktop\test\mn.jpg"));

  BufferedInputStream bfi = new BufferedInputStream(is1);

  BufferedOutputStream bfo = new BufferedOutputStream(fileOutputStream);

  int len;

  byte[] bs = new byte[1024];

  while((len=bfi.read(bs))!=-1){

  bfo.write(bs, 0, len);

  bfo.flush();

  }

  }

  二、Socket通訊:

  1、TCP/IP

  IP:InternetProtocol 網(wǎng)絡協(xié)議,支撐主機之間通訊的基本協(xié)議,如果需要實現(xiàn)主機之間的消息安全傳輸,通常會結合TCP協(xié)議共同使用。全稱為TCP/IP。都是傳輸層協(xié)議。

  TCP:傳輸控制協(xié)議,能保證數(shù)據(jù)消息的在主機之間安全傳輸,三次握手,四次揮手。是一個安全傳輸數(shù)據(jù)協(xié)議,所以一般用于數(shù)據(jù)傳輸?shù)臏蚀_性,安全性較高的應用,但是效率較低,如:視頻通話。

  C/S 架構: Client/Server 客戶端/服務器模式

  B/S 架構: Browser/Server瀏覽器/服務器模式

  服務器端:

  1、創(chuàng)建serverSocket,此套接字為服務器專用,構造器應當包含端口號,以供其他主機連接。

  2、監(jiān)聽套接字,并獲得連接:Socket socket = serverSocket.accept( );

  3、獲取套接字輸出流:socket.getOutputStream( );

  ServerSocket serverSocket = new ServerSocket(9999);

  System.out.println("服務器開啟");

  while (true) {

  Socket socket = serverSocket.accept();

  System.out.println("客戶端已經(jīng)連接" + socket.getInetAddress());

  PrintStream ps = new PrintStream(socket.getOutputStream());

  ps.print("歡迎使用socket服務器");

  }

  客戶端

  1、利用構造器獲取以供連接的套接字,屬性包含目標IP和端口號

  2、獲取套接字里面的輸入流:socket.getInputStreeam( );

  Socket socket = new Socket("127.0.0.1", 9999);

  InputStreamReader isr = new InputStreamReader(socket.getInputStream());

  BufferedReader br = new BufferedReader(isr);

  String msg = br.readLine();

  System.out.println(msg);

  2、UDP

  UDP:user datagram Protocol 用戶數(shù)據(jù)協(xié)議,無法保證數(shù)據(jù)的安全性,但是可以提交數(shù)據(jù)傳輸?shù)男А?/p>

  接收數(shù)據(jù):為阻塞式,需要單獨作為一個線程

  1、創(chuàng)建網(wǎng)絡通道datagramSocket,應當是包含端口地址的構造器

  2、創(chuàng)建數(shù)據(jù)包datagramPacket ,其中構造方法必須包含一個空的字符緩沖區(qū),偏移量等信息。

  3、通過datagramSocket.receiver(datagramPacket);接受數(shù)據(jù),向數(shù)據(jù)包寫入數(shù)據(jù)。

  4、獲取數(shù)據(jù)包內容 new String(datagramPacket.getData() , datagramPacket.getOffset(),datagramPacket.getLength());

  public static void main(String[] args) throws IOException {

  DatagramSocket datagramSocket = new DatagramSocket(2345);

  byte[] b = new byte[1024];

  while (true) {

  DatagramPacket datagramPacket = new DatagramPacket(b, b.length);

  datagramSocket.receive(datagramPacket);/pic/p>

  String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),

  datagramPacket.getLength());

  System.out.println("接受到的數(shù)據(jù)是" + string);

  }

  }

  發(fā)送數(shù)據(jù):

  1、創(chuàng)建網(wǎng)絡通道datagramSocket,構造器不需寫入

  2、創(chuàng)建數(shù)據(jù)包 datagramPacket,構造方法里面包含需要寫入的字節(jié)數(shù)組,偏移量,目標地址,目標端口號,當然也可以通過set方式設置目標地址地址等信息

  3、發(fā)送數(shù)據(jù)報 datagramSocket.send(datagramPacket);

  public static void main(String[] args) throws IOException {

  /pic/p>

  DatagramSocket datagramSocket = new DatagramSocket();

  /pic/p>

  String message="nnnnnn";

  DatagramPacket datagramPacket = new DatagramPacket(

  message.getBytes(), message.getBytes().length,

  InetAddress.getByName("192.168.46.19"),

  2345);

  datagramSocket.send(datagramPacket);

  datagramSocket.close();

  }

  3、UDP多播廣播

  發(fā)送數(shù)據(jù):

  1、創(chuàng)建多播廣播通道 new MulticastSocket( );

  2、獲取組播地址并將廣播加入此地址 multicastSocket.jionGroup( InterAddress.getByName("266.81.9.8") );

  3、構建datagramPacket,包含byte[]的內容,byte[]長度,ip,端口號。當然可以不用在構建方法添加ip和端口號。

  4、發(fā)送消息:multicastSocket.send(datagramPacket);

  public static void main(String[] args) throws IOException {

  MulticastSocket multicastSocket = new MulticastSocket();

  InetAddress group = InetAddress.getByName("226.81.9.8");

  multicastSocket.joinGroup(group);

  String content = "刷屏100遍";

  DatagramPacket dp = new DatagramPacket(content.getBytes(),content.getBytes().length);

  dp.setAddress(group);

  dp.setPort(2426);

  multicastSocket.send(dp);

  }

  接收數(shù)據(jù):阻塞式,需要單獨作為一個線程

  1、創(chuàng)建多播廣播通道:new MuliticastSocket(2426); 構造方法應當包含開啟的端口號

  2、獲取廣播地址,并加入此廣播地址 muliticast.jionGroup(InterAddress.getByName("192.22.22.2"));

  3、創(chuàng)建你個空的btye[]數(shù)組。和一個datdagramPacke對象。包含btye[]相關信息

  4、接收數(shù)據(jù):mutilicastSocket.receive(datagramPacket);

  5、讀取datagramPacket內容:利用String的構造方法

  public static void main(String[] args) throws IOException {

  MulticastSocket ms= new MulticastSocket(2426);

  InetAddress group = InetAddress.getByName("226.81.9.8");

  ms.joinGroup(group);

  byte[] b = new byte[1024];

  while (true) {

  DatagramPacket datagramPacket = new DatagramPacket(b, b.length);

  ms.receive(datagramPacket);/pic/p>

  String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),

  datagramPacket.getLength());

  System.out.println(datagramPacket.getAddress()+"" + string);

  }

  4、NIO

  NIO是jdk1.4之后引入的一套全新的IO API,處理數(shù)據(jù)的方式不同于傳統(tǒng)IO,傳統(tǒng)IO的處理數(shù)據(jù)的方式以字節(jié)為單位,而NIO是一個Buffer(數(shù)據(jù)塊) 為單位,傳統(tǒng)IO屬于阻塞式(流在讀取數(shù)據(jù)時如果未讀到時,程序會處于阻塞狀態(tài));而NIO的處理的方式為非阻塞式方式允許(底層為信號通訊),NIO可以在單線程應用中處理多個客戶請求。

【Java網(wǎng)絡基礎和Socket通信基礎】相關文章:

網(wǎng)絡通信基礎知識02-07

Java語言的基礎12-08

java編程基礎09-22

java語法基礎09-27

java語言基礎07-19

java基礎總結03-06

Java基礎語法12-11

Java基礎:抽象類和接口12-17

java教程之Java編程基礎12-06