激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

java網(wǎng)絡(luò )編程基本知識

時(shí)間:2024-09-09 14:51:08 JAVA認證 我要投稿
  • 相關(guān)推薦

java網(wǎng)絡(luò )編程基本知識

  java網(wǎng)絡(luò )編程的基本知識不少,下面yjbys小編為大家分享最新最全java中網(wǎng)絡(luò )程序基本知識,歡迎參考學(xué)習!

java網(wǎng)絡(luò )編程基本知識

  網(wǎng)絡(luò )基本知識:

  在java中網(wǎng)絡(luò )程序有兩種協(xié)議:TCP和UDP,TCP通過(guò)握手協(xié)議進(jìn)行可靠的連接,UDP則是不可靠連接。

  IP地址:用于標記一臺計算機的身份證。

  IP地址由網(wǎng)絡(luò )地址(確定網(wǎng)絡(luò ))和主機地址(網(wǎng)絡(luò )中的主機)組成。

  子網(wǎng)掩碼:為了區分網(wǎng)絡(luò )地址和主機地址。

  IP地址分為A類(lèi)地址、B類(lèi)地址、C類(lèi)地址(常用)、D類(lèi)地址、E類(lèi)地址。

  127.0.0.1(localhost)是本機地址。

  IPV4和IPV6

  IPV4使用4個(gè)十進(jìn)制數表示,即32位二進(jìn)制。

  SMTP是簡(jiǎn)單郵件傳輸協(xié)議,端口號是25.

  telnet用于連接遠程計算機或者因特網(wǎng)計算機提供的服務(wù)。每個(gè)服務(wù)都會(huì )設定一個(gè)端口。

  給出類(lèi)似 telnet ip port 即可和特定的服務(wù)進(jìn)行通信

  如果要連接因特網(wǎng)的服務(wù),不僅要給出端口,還要給出計算機的名稱(chēng),只有給出IP地址和端口號時(shí),才能夠請求服務(wù),并接收到應答。

  URL和URI

  URI:統一資源標識符,用于標識一個(gè)web資源,包含了兩個(gè)部分。

  (1)URL:統一資源定位符。能夠精確的定位數據的URI

  (2)URN:統一資源名稱(chēng)。除了URL的URI

  在java中URI和URL是分開(kāi)的兩個(gè)類(lèi),URI類(lèi)專(zhuān)門(mén)用于解析,URL用于通信。

  URL

  1.URI分類(lèi)

  絕對和相對:

  (1)絕對URI是指有確定的協(xié)議。比如http,ftp。后面以/進(jìn)行分隔

  (2)相對URI是沒(méi)有scheme的。

  透明和不透明:

  (1)不透明URI是不能夠被解析的URI。不透明URI是絕對URI。scheme后面的部分不是以/進(jìn)行分割。

  分層和不分層:

  (1)分層是絕對透明URI或相對URI。

  所有的網(wǎng)頁(yè)端口都是80.

  2.URI的作用:

  (1)解析

  URI的格式:

  [scheme:]scheme-specific-part[#fragment]

  scheme表示用的協(xié)議,可以是http\https\ftp\file等。

  scheme-specific-part是其余部分。

  進(jìn)一步細分:

  [scheme:][//authority][path][?query][#fragment]

  常用方法:

  getScheme()獲得scheme;

  getSchemeSpecificPart()

  getPath()

  getAuthority()

  (2)相對標識符和絕對標識符的轉換

  resolve和relative函數。

  URL和URLConnection

  URL的作用

  1.如果想要獲取某個(gè)網(wǎng)頁(yè)的html源代碼,比如http://blog.csdn.net/xiazdong 則只需要:

  (1)URL url = new URL("http://blog.csdn.net/xiazdong");

  (2)Scanner in = new Scanner(url.openStream());

  即可.

  2.獲取消息頭信息

  URLConnection connection = url.openConnection();

  connection.getHeaderFields()返回一個(gè)Map>

  connection.getContentLength();

  connection.getContentType();

  connection.setDoOutput(true)獲得輸出流

  connection.getOutputStream();

  connection.getInputStream();

  在網(wǎng)頁(yè)中如果要提交數據給web服務(wù)器,通常要把數據發(fā)送給web服務(wù)器,然后web服務(wù)器委派一個(gè)腳本對數據進(jìn)行處理,返回一個(gè)相應。

  通常發(fā)送數據的方法有兩種:get和post。

  (1)get方法是直接把數據跟在url的后面,以name=value進(jìn)行傳輸,

  每個(gè)數據之間用&進(jìn)行分割,value中的空格用+替換,非字母數字用%替換,并后跟兩個(gè)16進(jìn)制數,這種編碼方式稱(chēng)為URL編碼。URLEncoder和URLDecoder

  (2)post方法是通過(guò)URLConnection發(fā)送給服務(wù)器,編碼方式和get一樣。URLEncoder.encode(VALUE,"UTF-8");

  一般在傳輸中文時(shí)會(huì )運用編碼和解碼。

  示例:通過(guò)URLEncoder和URLDecoder編碼和解碼

  略

  InetAddress 根據域名得到IP地址或名稱(chēng)

  沒(méi)有構造方法,通過(guò):

  (1)InetAddress i1 = InetAddress.getByName(String)返回一個(gè)InetAddress實(shí)例。

  (2)如果一個(gè)地址有多個(gè)ip地址,比如google,有3個(gè)ip地址,就調用InetAddress[] i2 = InetAddress.getAllByName(String);

  InetAddress.getLocalhost()獲得本機的InetAddress實(shí)例。

  Socket(TCP)

  Socket是一個(gè)用于機器之間通信的類(lèi)。

  Socket客戶(hù)端:

  (1)Socket s = new Socket(ip,port);打開(kāi)一個(gè)套接字,發(fā)送請求

  (2)InputStream istream = s.getInputStream();接收數據

  (3)OutputStream ostream = s.getOutputStream();發(fā)送數據

  需要用PrintWriter和Scanner進(jìn)行包裝,并且注意PrintWriter的自動(dòng)緩沖。

  Socket服務(wù)器:注意多個(gè)客戶(hù)端同時(shí)訪(fǎng)問(wèn)服務(wù)器的問(wèn)題:多線(xiàn)程

  (1)ServerSocket server = new ServerSocket(port);創(chuàng )建一個(gè)端口

  (2)Socket s = server.accept(); 只有當有客戶(hù)端請求并連接,函數才會(huì )返回

  (3)InputStream istream = s.getInputStream();接收數據

  (4)OutputStream ostream = s.getOutputStream();發(fā)送數據

  需要用PrintWriter和Scanner進(jìn)行包裝,并且注意PrintWriter的自動(dòng)緩沖。

  我們在使用PrintWriter時(shí)需要使用println()函數;

  當服務(wù)器或客戶(hù)端任意一方請求結束通信,則立刻停止。

  問(wèn)題1:在套接字中會(huì )發(fā)生阻塞的地方:

  (1)實(shí)例化Socket時(shí),會(huì )阻塞。

  (2)在in.nextLine()類(lèi)似操作時(shí)會(huì )阻塞。

  解決方法:

  (1)對于第一個(gè)問(wèn)題,解決方法:

  Socket s = new Socket();建立無(wú)連接socket

  s.connect(new InetSocketAddress(host,port),timeout);設置超時(shí)。

  (2)對于第二個(gè)問(wèn)題,解決方法是設置s.setSoTimeout(long)設置超時(shí)時(shí)間

  問(wèn)題2:當客戶(hù)端想要關(guān)閉套接字時(shí),但卻不能確定服務(wù)器是否還在發(fā)送數據,但是只要一關(guān)閉就立刻斷開(kāi)。

  解決方法:

  socket.shutdownOutput()關(guān)閉輸出流

  socket.shutdownInput()關(guān)閉輸入流

  綜合代碼舉例:實(shí)現一個(gè)簡(jiǎn)單的對等通信程序,通過(guò)多線(xiàn)程,一個(gè)線(xiàn)程接收數據,一個(gè)線(xiàn)程發(fā)送數據。

  用戶(hù)1:

  [java] view plain copy

  import java.util.*;

  import java.io.*;

  import java.net.*;

  public class Client{

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

  Socket s = new Socket("localhost",8819);

  PrintWriter out = new PrintWriter(s.getOutputStream(),true);

  Thread t = new Thread(new Receive(s));

  t.start();

  //以下代碼用于發(fā)送數據

  Scanner in = new Scanner(System.in);//鍵盤(pán)輸入

  while(in.hasNextLine()){ //一直不斷

  out.println(in.nextLine()); //發(fā)送鍵盤(pán)輸入數據

  }

  }

  }

  class Receive implements Runnable //這個(gè)類(lèi)用于接收數據

  {

  private Socket s;

  public Receive(Socket s)

  {

  this.s = s;

  }

  public void run()

  {

  try{

  Scanner in = new Scanner(s.getInputStream()); //in:接收數據

  String str = null;

  while(true)

  {

  str = in.nextLine();

  System.out.println("服務(wù)器說(shuō):"+str); //打印接收數據

  }

  }

  catch(Exception e){}

  }

  }

  用戶(hù)2:

  [java] view plain copy

  import java.util.*;

  import java.io.*;

  import java.net.*;

  public class Server{

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

  ServerSocket server = new ServerSocket(8819);

  Socket s = server.accept();

  PrintWriter out = new PrintWriter(s.getOutputStream(),true);

  Thread t = new Thread(new Receive1(s));

  t.start();

  //以下代碼用于發(fā)送數據

  Scanner in = new Scanner(System.in);//鍵盤(pán)輸入

  while(in.hasNextLine()){ //一直不斷

  out.println(in.nextLine()); //發(fā)送鍵盤(pán)輸入數據

  }

  }

  }

  class Receive1 implements Runnable //這個(gè)類(lèi)用于接收數據

  {

  private Socket s;

  public Receive1(Socket s)

  {

  this.s = s;

  }

  public void run()

  {

  try{

  Scanner in = new Scanner(s.getInputStream()); //in:接收數據

  String str = null;

  while(true)

  {

  str = in.nextLine();

  System.out.println("客戶(hù)端說(shuō):"+str); //打印接收數據

  }

  }

  catch(Exception e){}

  }

  }

  以上的程序屬于C/S,需要同時(shí)維護客戶(hù)端和服務(wù)器的代碼。

  B/S:瀏覽器和服務(wù)器,只需要維護一方代碼即可。

【java網(wǎng)絡(luò )編程基本知識】相關(guān)文章:

Java基本編程技巧07-13

Java編程開(kāi)發(fā)簡(jiǎn)介06-20

關(guān)于JAVA的XML編程08-30

Java代碼的基本知識10-26

關(guān)于java面向對象編程10-06

Java中的動(dòng)態(tài)代碼編程06-27

Java編程節省內存的方法06-28

JAVA編程面試題及答案05-16

Java編程常見(jiàn)問(wèn)題匯總10-05

java面向對象編程題庫及答案07-28

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频