網絡編程

Edithtml

 

網絡編程

一.網絡編程基礎

網絡編程的目的:直接或間接地經過網絡協議與其餘計算機進行通信。java

網絡編程中有兩個主要的問題:
1.如何準確地定位網絡上一臺或多臺主機。
2.找到主機後如何可靠高效地進行數據傳輸。web

1.IP地址

IP地址:爲實現網絡中不一樣的計算機之間的通訊,在網絡中的每臺機器都必須有一個不同凡響事標識,這就是IP地址(IP Address)。數據庫

格式:數字型、32位、由4段8位的二進制數組成。通常表示爲十進制形式(4個0~255的十進制整數),中間用圓點隔開。如:166.111.78.98編程

域名地址:也是分段表示的,便於記憶的、字符串形式。數組

2.端口

端口:一個16位的整數,用於表示數據交給哪一個通訊程序處理。所以,端口就是應用程序與外界交流的出入口,它是一種抽象的軟件結構,包括一些數據結構和I/O(基本輸入/輸出)緩衝區。瀏覽器

端口用一個整數型標識符來表示,即端口號。
端口號跟協議相關,TCP/IP傳輸層的兩個協議TCP和UDP是徹底獨立的兩個軟件模塊,所以各自的端口號也相互獨立,端口一般稱爲協議端口(protocol port),簡稱端口服務器

不一樣的應用程序處理不一樣端口上的數據,同一臺機器上不能有兩個程序使用同一個端口,端口號能夠從0到65535,一般將它分爲三類:網絡

  • 公認端口(Well Known Ports):從0到1023,它們緊密綁定(Binding)一些服務。數據結構

  • 註冊端口(Registered Ports):從1024到49151。它們鬆散地綁定一些服務。

  • 動態和/或私有端口(Dynamic and/or Private Ports):從49152到65535,這些端口是應用程序使用的動態端口,應用程序通常不會主動使用這些端口。

3.網絡體系參考模型

OSI(Open System Interconnection)參考模型將網絡的不一樣功能劃分爲7層:

應用層:處理網絡應用

表示層:數據表示

會話層:主機間通訊

傳輸層:端到端的鏈接

網絡層:尋址和最短路徑

數據鏈路層:介質訪問(接入)

物理層:二進制傳輸

通訊實體的對等層之間不容許直接通訊,各層之間是嚴格的單向依賴,上層(Service user)使用下層提供的服務,下層(Service provider)向上層提供服務。

對等層通訊的實質:對等層實體之間虛擬通訊,下層向上層提供服務,實際通訊在最底層完成。

OSI各層所使用的協議:

應用層:Telnet、FTP、HTTP、DNS、SMTP、POP3

傳輸層:TCP、UDP ( 其中TCP:面向鏈接的可靠的傳輸協議。UDP:是無鏈接的,不可靠的傳輸協議。)

網絡層:IP、ICMP、IGMP

 

4.數據封裝

 一臺計算機要發送數據到另外一臺計算機,數據首先必須打包,打包的過程稱爲封裝。

封裝就是在數據前面加上特定的協議頭部。

OSI參考模型中,對等層協議之間的交換的信息單元稱爲協議數據單元(PDU, Protocol Data Unit)。

OSI參考模型中的每一層都要依靠下一層提供的服務。

爲了提供服務,下層把上層的PDU做爲本層的數據封裝,而後加入本層的頭部(和尾部)。頭部中含有完成數據傳輸所需的控制信息。

這樣,數據自上而下遞交的過程實際上就是不斷封裝的過程。到達目的地後自下而上遞交的過程就是不斷拆封的過程。由此可知,在物理線路上傳輸的數據,其外面實際上被包封了多層「信封」。

二.InetAddress類

  • InetAddress類
    InetAddress類用來封裝咱們前面討論的數字式的IP地址和該地址的域名。
    InetAddress類內部隱藏了地址數字。

  • InetAddress類中的工廠方法
    InetAddress類沒有明顯的構造函數。爲生成一個InetAddress對象,必須運用一個可用的工廠方法。
    工廠方法(factory method)僅是一個類中靜態方法返回一個該類實例的約定。
    對於InetAddress,三個方法:getLocalHost()、getByName()以及getAllByName()能夠用來建立InetAddress的實例。
    getLocalHost()僅返回象徵本地主機的InetAddress對象。

  • 本機地址還爲localhost,127.0.0.1,這三個地址都是一回事。
  • getByName()方法返回一個傳給它的主機名的InetAddress。
  • 若是這些方法不能解析主機名,它們引起一個UnknownHostException異常。
  • 在Internet上,用一個名稱來表明多個機器是常有的事。
  • getAllByName()工廠方法返回表明由一個特殊名稱分解的全部地址的InetAddresses類數組。
  • 在不能把名稱分解成至少一個地址時,它將引起一個UnknownHostException異常。

另外,在SocketAddress中的子類InetSocketAddress , 此類實現 IP 套接字地址(IP 地址 + 端口號)。


1.import java.net.*;
2.class InetAddressDemo
3.
{
4. public static void main(String[] args) throws Exception
5.
{
6. InetAddress ia = InetAddress.getLocalHost();//獲取本機IP地址
7. System.out.println(ia.getHostAddress());//
8. System.out.println(ia.getHostName());
9.
10. InetAddress[] ia2 = InetAddress.getAllByName("www.baidu.com");
11. for (int i=0;i<ia2.length ;i++ )
12. {
13. System.out.println(ia2[i].getHostAddress());
14. System.out.println(ia2[i].getHostName());
15. }
16.
17. }
18.}
19.

三.UDP

UDP是User Datagram Protocol的簡稱,是一種無鏈接的協議,每一個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,所以可否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。

1.特色

1, 每一個數據報中都給出了完整的地址信息,所以無須要創建發送方和接收方的鏈接。

2, UDP傳輸數據時是有大小限制的,每一個被傳輸的數據報必須限定在64KB以內。

3, UDP是一個不可靠的協議,發送方所發送的數據報並不必定以相同的次序到達接收方

4, UDP不須要創建創建鏈接, 速度快

5, UDP操做簡單,並且僅須要較少的監護,所以一般用於局域網高可靠性的分散系統中client/server應用程序, 多用於視頻會議,桌面共享之類

2.Java中操做UDP

使用位於JDK中Java.net包下的DatagramSocket和DatagramPacket類,能夠很是方便地控制用戶數據報文。
DatagramSocket類:建立接收和發送UDP的Socket實例

DatagramSocket():建立實例。一般用於客戶端編程,它並無特定監聽的端口,僅僅使用一個臨時的。

DatagramSocket(int port):建立數據報Socket並將其綁定到本地主機上的指定端口。。

DatagramSocket(int port, InetAddress localAddr):這是個很是有用的構建器,當一臺機器擁有多於一個IP地址的時候,由它建立的實例僅僅接收來自LocalAddr的報文。

receive(DatagramPacket d):接收數據報文到d中。receive方法產生一個「阻塞」。

send(DatagramPacket d):發送報文d到目的地。

setSoTimeout(int timeout):設置超時時間,單位爲毫秒。

close():關閉DatagramSocket。在應用程序退出的時候,一般會主動釋放資源,關閉Socket,可是因爲異常地退出可能形成資源沒法回收。因此,應該在程序完成時,主動使用此方法關閉Socket,或在捕獲到異常拋出後關閉Socket。

DatagramPacket:用於處理報文,將byte數組、目標地址、目標端口等數據包裝成報文或者將報文拆卸成byte數組。

DatagramPacket(byte[] buf, int length, InetAddress addr, int port): 構造數據報包,用來將長度爲 length 的包發送到指定主機上的指定端口號。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):從buf數組中,取出offset開始的、length長的數據建立數據包對象,目標是addr地址,port端口。

DatagramPacket(byte[] buf, int offset, int length):構造 DatagramPacket,用來接收長度爲 length 的包,在緩衝區中指定了偏移量。

DatagramPacket(byte[] buf, int length):構造 DatagramPacket,用來接收長度爲 length 的數據包。

getData():它從實例中取得報文的byte數組編碼。

3.UDP實現發送和接收

1.發送端

1./*
2.需求:
3.定義發送端,經過udp傳輸方式,將鍵盤錄入的一段文字數據發送出去;
4.
5.思路:
6.1.經過DatagramSocket創建udpsocket服務;
7.2.提供數據,並經過DatagramPacket將數據封裝到數據包中;
8.3.經過上面創建的socket服務的發送功能將數據發送出去;
9.4.關閉資源;
10.*/

11.import java.net.*;
12.import java.io.*;
13.class UdpSendDemo
14.
{
15. public static void main(String[] args) throws Exception
16.
{
17. DatagramSocket ds = new DatagramSocket(10004);//將該socket綁定在該主機的10004指定端口,從這個端口發送
18. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
19. String line = null;
20. while ((line=bufr.readLine()) !=null)
21. {
22. if (line.equals("886"))//用一個"886"的標識符來讓循環中止
23. {
24. break;
25. }
26. byte[] buf = line.getBytes();
27. DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);//從指定該主機指定端口10000發送buf字符串中一段數據
28. ds.send(dp);//用該socket發送dp數據包
29. }
30. ds.close();
31. }
32.}
33.

2.接收端

1./*
2.需求:
3.定義接收端,接收udp協議接收的數據並進行處理;
4.
5.思路:
6.1.經過DatagramSocket創建udp socket服務;
7.2.經過DatagramPacket定義數據包,用於存儲接收到的數據;
8.3.經過上面創建功能將接收到的數據存入已定義好的數據包中;
9.4.經過數據包特有的方法來操做的socket服務的接收數據;
10.5.關閉資源;
11.*/

12.import java.net.*;
13.class UdpReceDemo
14.
{
15. public static void main(String[] args) throws Exception
16.
{
17. DatagramSocket ds = new DatagramSocket(10000);//將該socket綁定在該主機的10000指定端口,用於監聽該端口的數據
18. while (true)
19. {
20. byte[] buf = new byte[1024];
21. DatagramPacket dp = new DatagramPacket(buf,buf.length);//構造 DatagramPacket,用來接收長度爲 length 的數據包。
22. ds.receive(dp);
23. String address = dp.getAddress().getHostAddress();//由於getAddress()返回的是InetAddress類
24. String data = new String(dp.getData(),0,dp.getLength());
25. int port = dp.getPort();
26. System.out.println(address+"::"+data+"::"+port);
27. //ds.close();由於通常接收端會一直開等待接收數據
28. }
29.
30. }
31.}

4.利用多線程在一個程序裏面實現發送接收

1./*
2.利用多線程,將發送端和接收端放在一個程序下運行,相似QQ
3.*/

4.import java.io.*;
5.import java.net.*;
6.class ChatDemo
7.
{
8. public static void main(String[] args) throws Exception
9.
{
10. DatagramSocket sendsocket = new DatagramSocket();
11. DatagramSocket recesocket = new DatagramSocket(10003);
12. new Thread(new Send(sendsocket)).start();
13. new Thread(new Rece(recesocket)).start();
14. }
15.}
16.class Send implements Runnable
17.
{
18. private DatagramSocket ds;
19. Send(DatagramSocket ds)
20. {
21. this.ds = ds;
22. }
23. public void run()
24.
{
25. try
26. {
27. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
28. String line = null;
29. while ((line=bufr.readLine())!=null)
30. {
31. if (line.equals("886"))
32. {
33. break;
34. }
35. byte[] buf = line.getBytes();
36. DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10003);
37. ds.send(dp);
38. }
39. ds.close();
40. }
41. catch (Exception e)
42. {
43. throw new RuntimeException("發送端出錯");
44. }
45. }
46.}
47.class Rece implements Runnable
48.
{
49. private DatagramSocket ds;
50. Rece(DatagramSocket ds)
51. {
52. this.ds = ds;
53. }
54. public void run()
55.
{
56. try
57. {
58. while (true)
59. {
60. byte[] buf = new byte[1024];
61. DatagramPacket dp = new DatagramPacket(buf,buf.length);
62. ds.receive(dp);
63. String address = dp.getAddress().getHostAddress();
64. String data = new String(dp.getData(),0,dp.getLength());
65. int port = dp.getPort();
66. System.out.println(address+"::"+data+"::"+port);
67. }
68. }
69. catch (Exception e )
70. {
71. throw new RuntimeException("接收端出錯");
72. }
73.
74.
75. }
76.}

四.TCP

  • TCP是Tranfer Control Protocol的簡稱,是一種面向鏈接的保證可靠傳輸的協議。
  • 經過TCP協議傳輸,獲得的是一個順序的無差錯的數據流。
  • 發送方和接收方的成對的兩個 socket之間必須創建鏈接,以便在TCP協議的基礎上進行通訊,當一個socket(一般都是server socket)等待創建鏈接時,另外一個socket能夠要求進行鏈接,一旦這兩個socket鏈接起來,它們就能夠進行雙向數據傳輸,雙方均可以進行發送或接收操做。

1.特色

1, 面向鏈接的協議,在socket之間進行數據傳輸以前必然要創建鏈接(經過三次握手創建鏈接),因此在TCP中須要鏈接時間。

2, TCP一旦鏈接創建起來,雙方的socket就能夠按統一的格式傳輸大的數據。

3, TCP是一個可靠的協議,它確保接收方徹底正確地獲取發送方所發送的所有數據。

4, 由於須要創建鏈接,效率偏低。

2.TCP實現發送接收

1.客戶端

1.TCP分爲客戶端和服務端,客戶端的對象是Socket,服務端的對象是ServerSocket
2.
3.定義客戶端步驟:
4.1.建立Socket服務,並鏈接指定主機和端口;
5.
6.2.爲了發送數據,獲取Socket流中的輸出流;
7.
8.
9.*/
10.import java.io.*;
11.import java.net.*;
12.class TcpClientDemo
13.
{
14. public static void main(String[] args) throws Exception
15.
{
16. Socket s = new Socket(InetAddress.getLocalHost(),10004);
17. OutputStream ops = s.getOutputStream();
18. byte[] buf = "服務端,你好".getBytes();
19. ops.write(buf);
20.
21. //接收服務端發送過來的數據
22. InputStream ips = s.getInputStream();
23. byte[] buf2 = new byte[1024];
24. int len = ips.read(buf2);
25. System.out.println(new String(buf2,0,len));
26. s.close();
27. }
28.}
29.

2.服務端

1./*
2.定義服務端步驟:
3.1.創建服務端的Socket服務,ServerSocket;
4.2.獲取鏈接過來的客戶端對象,經過ServerSocket裏的accept()方法,沒有鏈接則會等待,該方法是阻塞式方法;
5.3.經過獲取到的客戶端的Socket對象的讀取流InputStream,來接收信息;
6.4.關閉服務器;
7.
8.ServerSocket裏面有構造方法ServerSocket(int port,int backlog),其中backlog表明服務容許的最大鏈接數
9.
10.*/

11.import java.io.*;
12.import java.net.*;
13.class TcpServerDemo
14.
{
15. public static void main(String[] args) throws Exception
16.
{
17. ServerSocket ss = new ServerSocket(10004);
18. Socket s = ss.accept();
19. InputStream ips = s.getInputStream();
20. byte[] buf = new byte[1024];
21. int num = ips.read(buf);
22. String data = new String(buf,0,num);
23. String ip = s.getInetAddress().getHostAddress();
24. System.out.println(data+"::"+ip);
25.
26. //給客戶端反饋數據
27. OutputStream ops = s.getOutputStream();
28. ops.write("收到消息,你也好啊".getBytes());
29.
30. s.close();
31. ss.close();
32. }
33.}

3.創建一個文本轉換服務器

需求:創建一個文本轉換服務器.
客戶端給服務器發送文本,服務端將文本轉成大寫返回給客戶端, 而且客戶端能夠不斷的進行文本轉換,當客戶端輸入over時結束.

1.客戶端
客戶端:
用IO的思想來思考,
源:鍵盤錄入.
目的:網絡設備,網絡輸出流.
操做的是文本數據,能夠選擇字符流.

步驟:
1.創建服務;
2.獲取鍵盤錄入;
3.將數據發送給服務端;
4.獲取服務端返回的數據;

1./*
2.該例子容易出現的問題:服務端和客戶端莫名的都等待;
3.由於客戶端和服務端都有阻塞式方法,這些方法沒有讀到結束標記,要麼數據沒有從緩衝區刷出或者沒有讀到換行符\r\n;
4.
5.*/

6.
7.import java.io.*;
8.import java.net.*;
9.class TransClientDemo
10.
{
11. public static void main(String[] args) throws Exception
12.
{
13. Socket s = new Socket(InetAddress.getLocalHost(),10005);
14. //定義讀取鍵盤數據的流對象
15. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
16. //目的,將數據寫入到socket輸出流,發給服務端
17. BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
18. //這裏用用PrintWriter來代替上面的bufout:PrintWriter out = new PrintWriter(s.getOutputStream(),true)
19. //定義一個socket讀取流,讀取服務端返回的數據
20. BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
21. String line = null;
22. while ((line=bufr.readLine()) !=null)
23. {
24. if ("over".equals(line))
25. {
26. break;
27. }
28. bufout.write(line);//將數據寫入socket輸出流
29. bufout.newLine();//由於服務端的readLine()方法以\r\n來判斷結束標記,若是沒有則會一直阻塞,因此加入換行符
30. bufout.flush();//必須將緩衝區裏面數據刷出
31. //若是上面用了PrintWriter的話,這裏上面三行能夠直接用out.println(line)
32. String str = bufin.readLine();//讀取服務端返回的數據
33. System.out.println("Server:"+str);
34. }
35. s.close();
36. bufr.close();
37. }
38.}
39.

服務端

1.import java.io.*;
2.import java.net.*;
3.class TransServerDemo
4.
{
5. public static void main(String[] args) throws Exception
6.
{
7. ServerSocket ss = new ServerSocket(10005);
8. Socket s = ss.accept();
9. //讀取socket讀取流中的數據
10. BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
11. //目的,socket輸出流,將大寫數據寫入socket輸出流
12. BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
13. //這裏用用PrintWriter來代替上面的bufout:PrintWriter out = new PrintWriter(s.getOutputStream(),true)
14. String line = null;
15. while ((line=bufin.readLine()) !=null)
16. {
17. System.out.println(line);
18. bufout.write(line.toUpperCase());
19. bufout.newLine();
20. bufout.flush();
21. //若是上面用了PrintWriter的話,這裏上面三行能夠直接用out.println(line)
22. }
23. s.close();
24. ss.close();
25. }
26.}
27.

4.客戶端向服務器發送文本文件

1.客戶端

1./*
2.將文件從客戶端上傳到服務端
3.*/

4.import java.io.*;
5.import java.net.*;
6.class UploadClientDemo
7.
{
8. public static void main(String[] args) throws Exception
9.
{
10. Socket s = new Socket(InetAddress.getLocalHost(),10005);
11.
12. BufferedReader bufr = new BufferedReader(new FileReader("CopyDemo.java"));
13.
14. PrintWriter out = new PrintWriter(s.getOutputStream(),true);
15.
16. BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
17. String line = null;
18. while ((line=bufr.readLine())!=null)
19. {
20. out.println(line);
21. }
22. out.println("over");//發送一個結束標記,而後服務端會一直等待
23. //在實際開發中,直接用s.shutdownOutput(),以此來關閉發送流,同時服務端就收到一個結束標記
24. String str = in.readLine();
25. System.out.println(str);
26. s.close();
27. bufr.close();
28. }
29.}
30.

2.服務端

1.import java.io.*;
2.import java.net.*;
3.class UploadServerDemo
4.
{
5. public static void main(String[] args) throws Exception
6.
{
7. ServerSocket ss = new ServerSocket(10005);
8. Socket s = ss.accept();
9. BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
10. PrintWriter bufw = new PrintWriter(new FileWriter("e:\\haha.txt"),true);
11. PrintWriter out = new PrintWriter(s.getOutputStream(),true);
12.
13. String line = null;
14. while ((line=in.readLine())!=null)
15. {
16. if ("over".equals(line))
17. {
18. break;
19. }
20. bufw.println(line);
21. }
22.
23. out.println("發送成功");
24. s.close();
25. ss.close();
26. bufw.close();
27.
28. }
29.}

5.客戶端向服務器發送圖片

1.客戶端

1./*
2.客戶端向服務端上傳圖片
3.*/

4.import java.io.*;
5.import java.net.*;
6.class PicClientDemo
7.
{
8. public static void main(String[] args) throws Exception
9.
{
10. Socket s = new Socket(InetAddress.getLocalHost(),10007);
11. FileInputStream fis = new FileInputStream("e:\\1.jpg");
12. OutputStream ops = s.getOutputStream();
13. int len = 0;
14. byte[] buf = new byte[1024];
15. while ((len=fis.read(buf))!=-1)
16. {
17. ops.write(buf,0,len);
18. }
19. s.shutdownOutput();
20. s.close();
21. fis.close();
22. }
23.
24.}

2.服務端

1.import java.io.*;
2.import java.net.*;
3.class PicServerDemo
4.
{
5. public static void main(String[] args) throws Exception
6.
{
7. ServerSocket ss = new ServerSocket(10007);
8. Socket s = ss.accept();
9. InputStream ips = s.getInputStream();
10. FileOutputStream fos = new FileOutputStream("e:\\2.jpg");
11. byte[] buf = new byte[1024];
12. int len = 0;
13. while ((len=ips.read(buf))!=-1)
14. {
15. fos.write(buf,0,len);
16. }
17. fos.close();
18. s.close();
19. ss.close();
20. }
21.}
22.
23.

6.使用多線程實現多個客戶端同時向服務端發送文件

1.客戶端

1./*
2.當多個客服端同時向服務端發送文件時,須要採用多線程才行
3.
4.*/

5.import java.io.*;
6.import java.net.*;
7.class UploadPicByThreadClient
8.
{
9. public static void main(String[] args) throws Exception
10.
{
11. if (!(args.length == 1))
12. {
13. System.out.println("請選擇一個圖片上傳");
14. return;
15. }
16. if (!(args[0].endsWith(".jpg")))
17. {
18. System.out.println("請選擇一個.jpg文件");
19. return;
20. }
21. File file = new File(args[0]);
22. if (!(file.exists() && file.isFile()))
23. {
24. System.out.println("文件不存在或者不是文件");
25. return;
26. }
27.
28. Socket s = new Socket("192.168.0.114",10008);
29. FileInputStream fis = new FileInputStream(file);
30. OutputStream ops = s.getOutputStream();
31. int len = 0;
32. byte[] buf = new byte[1024];
33. while ((len=fis.read(buf))!=-1)
34. {
35. ops.write(buf,0,len);
36. }
37. s.shutdownOutput();
38. s.close();
39. fis.close();
40. }
41.}
42.

2.服務端

1.import java.io.*;
2.import java.net.*;
3.class UploadPicByThreadServer
4.
{
5. public static void main(String[] args) throws Exception
6.
{
7. ServerSocket ss = new ServerSocket(10008);
8. while (true)
9. {
10. Socket s = ss.accept();
11. new Thread(new PicThread(s)).start();
12. }
13. }
14.}
15.class PicThread implements Runnable
16.
{
17. Socket s;
18. PicThread(Socket s)
19. {
20. this.s = s;
21. }
22.
23. public void run()
24.
{
25. String ip = s.getInetAddress().getHostAddress();
26. System.out.println(ip+":::connect");
27. int num = 1;
28. try
29. {
30. InputStream ips = s.getInputStream();
31.
32. File file = new File("e:\\"+ip+"("+num+")"+".jpg");
33. while (file.exists())
34. {
35. file = new File("e:\\"+ip+"("+(num++)+")"+".jpg");
36. }
37. FileOutputStream fos = new FileOutputStream(file);
38. byte[] buf = new byte[1024];
39. int len = 0;
40. while ((len=ips.read(buf))!=-1)
41. {
42. fos.write(buf,0,len);
43. }
44. fos.close();
45. s.close();
46.
47. }
48. catch (Exception e)
49. {
50. throw new RuntimeException("上傳失敗");
51. }
52.
53. }
54.}
55.
56.

7.客戶端併發登陸服務器

客戶端經過鍵盤錄入用戶名;
服務端對這個用戶名進行校驗;
若是該用戶存在,在服務端顯示: 「XXX,已登陸」 , 並在客戶端顯示: 「XXX,歡迎光臨」

若是該用戶不存在,在服務端顯示: 「XXX,嘗試登陸」 , 並在客戶端顯示:」XXX,該用戶不存在」
1.客戶端

1./*
2.客戶端併發登陸服務器
3.
4.客戶端經過鍵盤錄入用戶名;
5.服務端對這個用戶名進行校驗;
6.若是該用戶存在,在服務端顯示: "XXX,已登陸" , 並在客戶端顯示: "XXX,歡迎光臨"
7.
8.若是該用戶不存在,在服務端顯示: "XXX,嘗試登陸" , 並在客戶端顯示:"XXX,該用戶不存在"
9.
10.
11.*/

12.import java.io.*;
13.import java.net.*;
14.class UserLoginClient
15.
{
16. public static void main(String[] args) throws Exception
17.
{
18. Socket s = new Socket(InetAddress.getLocalHost(),10009);
19. //定義讀取流,讀取鍵盤錄入
20. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
21. //socket輸出流,發送登陸的的name
22. PrintWriter out = new PrintWriter(s.getOutputStream(),true);
23. //socket輸入流,接收服務端發送的信息
24. BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
25. for (int x=0;x<3;x++ )
26. {
27. //接收鍵盤錄入
28. String name = bufr.readLine();
29. if (name == null)
30. {
31. break;
32. }
33. //發送給服務端
34. out.println(name);
35. //接收服務端信息
36. String info = in.readLine();
37. System.out.println(info);
38. if (info.equals(name+"歡迎登陸"))
39. {
40. break;
41. }
42. }
43. s.close();
44. bufr.close();
45. }
46.}
47.

2.服務端

1.import java.io.*;
2.import java.net.*;
3.class UserLoginServer
4.
{
5. public static void main(String[] args) throws Exception
6.
{
7. ServerSocket ss = new ServerSocket(10009);
8. while (true)
9. {
10. Socket s = ss.accept();
11. new Thread(new UserThread(s)).start();
12. }
13. }
14.}
15.class UserThread implements Runnable
16.
{
17. Socket s;
18. UserThread(Socket s)
19. {
20. this.s = s;
21. }
22. public void run()
23.
{
24. //獲取到登陸客戶端的ip
25. String ip = s.getInetAddress().getHostAddress();
26. System.out.println(ip+":::connect");
27. try
28. {
29. //獲取socket輸入流,讀取客服端發送過來的信息
30. BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
31. //定於輸出流,向客戶端發送信息
32. PrintWriter out = new PrintWriter(s.getOutputStream(),true);
33. //定義一個標記,來判斷客戶端發送過來的信息和數據庫中的信息是否相同
34. boolean flag = false;
35. String name = null;//用來接收客戶端發送過來的用戶登陸信息
36. for (int x =0;x<3 ;x++ )//容許用戶連續嘗試登陸三次
37. {
38. //用於讀取服務器中存的用戶列表
39. BufferedReader bufr = new BufferedReader(new FileReader("e:\\1.txt"));
40. name = in.readLine();//讀取一次socket輸入流中的用戶信息
41. String line = null;
42. while ((line=bufr.readLine())!=null)
43. {
44. if (name.equals(line))
45. {
46. flag = true;
47. break;
48. }
49. }
50. if (flag == true)
51. {
52. System.out.println(ip+"登陸成功");
53. out.println(name+"歡迎登陸");
54. bufr.close();
55. break;
56. }
57. System.out.println(ip+"嘗試登陸");
58. out.println(name+"用戶不存在");
59. bufr.close();
60. }
61. s.close();
62. }
63. catch (Exception e)
64. {
65. throw new RuntimeException("上傳失敗");
66. }
67. }
68.}
69.
70.

8.自定義瀏覽器功能

1./*
2.自定義瀏覽器功能
3.*/

4.import java.io.*;
5.import java.net.*;
6.class MyIE
7.
{
8. public static void main(String[] args) throws Exception
9.
{
10. Socket s = new Socket(InetAddress.getLocalHost(),8080);
11. PrintWriter out = new PrintWriter(s.getOutputStream(),true);
12.
13. //模擬瀏覽器向服務器發送的請求消息頭
14. out.println("GET /myweb/web.html HTTP/1.1");
15. out.println("Accept: */*");
16. out.println("Accept-Language: zh-Hans-CN,zh-Hans;q=0.5");
17. out.println("Host: 221.237.64.248:10010");
18. out.println("Connection: closed");
19. out.println();
20. out.println();
21.
22. BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
23. String line = null;
24. while ((line=bufr.readLine())!=null)
25. {
26. System.out.println(line);
27. }
28. s.close();
29. }
30.}
31.//瀏覽器向TOMCAT服務器發送的請求消息頭
32./*
33.GET / HTTP/1.1
34.Accept: text/html, application/xhtml+xml, image/jxr
35.Accept-Language: zh-Hans-CN,zh-Hans;q=0.5
36.User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2
37.704.79 Safari/537.36 Edge/14.14393
38.Accept-Encoding: gzip, deflate
39.Host: 221.237.64.248:10010
40.Connection: Keep-Alive
41.*/

42.
43.//TOMCAT服務器向瀏覽器返回的應答消息頭
44./*
45.HTTP/1.1 200 OK
46.Server: Apache-Coyote/1.1
47.Accept-Ranges: bytes
48.ETag: W/"191-1476517035954"
49.Last-Modified: Sat, 15 Oct 2016 07:37:15 GMT
50.Content-Type: text/html
51.Content-Length: 191
52.Date: Sat, 15 Oct 2016 14:06:12 GMT
53.Connection: close
54.
55.
56.*/

57.

五.URL和URLConnection

1.應用

1./*
2.URL
3.URLConnection
4.*/

5.import java.io.*;
6.import java.net.*;
7.class URLDemo
8.
{
9. public static void main(String[] args) throws Exception
10.
{
11. URL url = new URL("http://221.237.64.124:8080/myweb/web.html");
12. String protocol = url.getProtocol();//獲取協議 獲得http
13. String host = url.getHost();//獲取主機
14. int port = url.getPort();//獲取端口
15. String path = url.getPath();//獲取路徑
16. String file = url.getFile();//獲取文件名
17. String query = url.getQuery();//獲取查詢部分
18.
19. //URLConnection將數據在應用層封裝,因此返回的數據只有網頁裏面的數據,就如瀏覽器返回的數據同樣,不會將服務器返回的應答消息頭顯示出來
20. URLConnection conn = url.openConnection();//返回一個 URLConnection 對象,它表示到 URL 所引用的遠程對象的鏈接。
21. System.out.println(conn);//結果爲:sun.net.www.protocol.http.HttpURLConnection:http://221.237.64.124:8080/myweb/web.html?name=zhangsan&color=red
22. InputStream in = conn.getInputStream();//獲取URLConnection裏的讀取流
23. byte[] buf = new byte[1024];
24. int len = in.read(buf);
25. System.out.println(new String(buf,0,len));
26. }
27.}

2.域名解析

域名解析:
域名解析是把域名指向網站空間IP,讓人們經過註冊的域名能夠方便地訪問到網站的一種服務。IP地址是網絡上標識站點的數字地址,爲了方便記憶,採用域名來代替IP地址標識站點地址。域名解析就是域名到IP地址的轉換過程。域名的解析工做由DNS服務器完成

當咱們在輸入網址,系統會先訪問本地的hosts文件,位置C:WINDOWS\system32\driver\setc,而後在訪問DNS服務器
1.好比避開盜版軟件的驗證服務器,在本地的host文件將網址改成本地host,127.0.0.1,這樣就會驗證失敗
2.能夠避開一些垃圾網站,在本地host中將網址的映射改爲127.0.0.1

@%2802.%u8D44%u6599%29%5B%u7F51%u7EDC%u7F16%u7A0B%2C%20%u901A%u4FE1%u534F%u8BAE%2C%20%u7F51%u7EDC%u53C2%u8003%u6A21%u578B%2C%20IP%u5730%u5740%2C%20%u7AEF%u53E3%2CInetAddress%2CUDP%2CTCP%2CURL%5D%0A%23%u7F51%u7EDC%u7F16%u7A0B%0A%0A%5BTOC%5D%0A%23%23%u4E00.%u7F51%u7EDC%u7F16%u7A0B%u57FA%u7840%0A%0A%u7F51%u7EDC%u7F16%u7A0B%u7684%u76EE%u7684%uFF1A%u76F4%u63A5%u6216%u95F4%u63A5%u5730%u901A%u8FC7%u7F51%u7EDC%u534F%u8BAE%u4E0E%u5176%u4ED6%u8BA1%u7B97%u673A%u8FDB%u884C%u901A%u8BAF%u3002%0A%0A%u7F51%u7EDC%u7F16%u7A0B%u4E2D%u6709%u4E24%u4E2A%u4E3B%u8981%u7684%u95EE%u9898%uFF1A%0A1.%u5982%u4F55%u51C6%u786E%u5730%u5B9A%u4F4D%u7F51%u7EDC%u4E0A%u4E00%u53F0%u6216%u591A%u53F0%u4E3B%u673A%u3002%0A2.%u627E%u5230%u4E3B%u673A%u540E%u5982%u4F55%u53EF%u9760%u9AD8%u6548%u5730%u8FDB%u884C%u6570%u636E%u4F20%u8F93%u3002%0A%0A%23%23%231.IP%u5730%u5740%0AIP%u5730%u5740%uFF1A%u4E3A%u5B9E%u73B0%u7F51%u7EDC%u4E2D%u4E0D%u540C%u7684%u8BA1%u7B97%u673A%u4E4B%u95F4%u7684%u901A%u4FE1%uFF0C%u5728%u7F51%u7EDC%u4E2D%u7684%u6BCF%u53F0%u673A%u5668%u90FD%u5FC5%u987B%u6709%u4E00%u4E2A%u4E0E%u4F17%u4E0D%u540C%u4E8B%u6807%u8BC6%uFF0C%u8FD9%u5C31%u662FIP%u5730%u5740%uFF08IP%20Address%uFF09%u3002%0A%0A%u683C%u5F0F%uFF1A%u6570%u5B57%u578B%u300132%u4F4D%u3001%u75314%u6BB58%u4F4D%u7684%u4E8C%u8FDB%u5236%u6570%u7EC4%u6210%u3002%u4E00%u822C%u8868%u793A%u4E3A%u5341%u8FDB%u5236%u5F62%u5F0F%uFF084%u4E2A0%7E255%u7684%u5341%u8FDB%u5236%u6574%u6570%uFF09%uFF0C%u4E2D%u95F4%u7528%u5706%u70B9%u9694%u5F00%u3002%u5982%uFF1A166.111.78.98%0A%0A%u57DF%u540D%u5730%u5740%uFF1A%u4E5F%u662F%u5206%u6BB5%u8868%u793A%u7684%uFF0C%u4FBF%u4E8E%u8BB0%u5FC6%u7684%u3001%u5B57%u7B26%u4E32%u5F62%u5F0F%u3002%0A%0A%23%23%232.%u7AEF%u53E3%0A%u7AEF%u53E3%uFF1A%u4E00%u4E2A16%u4F4D%u7684%u6574%u6570%uFF0C%u7528%u4E8E%u8868%u793A%u6570%u636E%u4EA4%u7ED9%u54EA%u4E2A%u901A%u4FE1%u7A0B%u5E8F%u5904%u7406%u3002%u56E0%u6B64%uFF0C%u7AEF%u53E3%u5C31%u662F%u5E94%u7528%u7A0B%u5E8F%u4E0E%u5916%u754C%u4EA4%u6D41%u7684%u51FA%u5165%u53E3%uFF0C%u5B83%u662F%u4E00%u79CD%u62BD%u8C61%u7684%u8F6F%u4EF6%u7ED3%u6784%uFF0C%u5305%u62EC%u4E00%u4E9B%u6570%u636E%u7ED3%u6784%u548CI/O%uFF08%u57FA%u672C%u8F93%u5165/%u8F93%u51FA%uFF09%u7F13%u51B2%u533A%u3002%0A%0A%u7AEF%u53E3%u7528%u4E00%u4E2A%u6574%u6570%u578B%u6807%u8BC6%u7B26%u6765%u8868%u793A%uFF0C%u5373%u7AEF%u53E3%u53F7%u3002%0A%u7AEF%u53E3%u53F7%u8DDF%u534F%u8BAE%u76F8%u5173%uFF0CTCP/IP%u4F20%u8F93%u5C42%u7684%u4E24%u4E2A%u534F%u8BAETCP%u548CUDP%u662F%u5B8C%u5168%u72EC%u7ACB%u7684%u4E24%u4E2A%u8F6F%u4EF6%u6A21%u5757%uFF0C%u56E0%u6B64%u5404%u81EA%u7684%u7AEF%u53E3%u53F7%u4E5F%u76F8%u4E92%u72EC%u7ACB%uFF0C%u7AEF%u53E3%u901A%u5E38%u79F0%u4E3A%u534F%u8BAE%u7AEF%u53E3%uFF08protocol%20port%uFF09%uFF0C%u7B80%u79F0%u7AEF%u53E3%0A%0A%u4E0D%u540C%u7684%u5E94%u7528%u7A0B%u5E8F%u5904%u7406%u4E0D%u540C%u7AEF%u53E3%u4E0A%u7684%u6570%u636E%uFF0C%u540C%u4E00%u53F0%u673A%u5668%u4E0A%u4E0D%u80FD%u6709%u4E24%u4E2A%u7A0B%u5E8F%u4F7F%u7528%u540C%u4E00%u4E2A%u7AEF%u53E3%uFF0C%u7AEF%u53E3%u53F7%u53EF%u4EE5%u4ECE0%u523065535%uFF0C%u901A%u5E38%u5C06%u5B83%u5206%u4E3A%u4E09%u7C7B%uFF1A%0A%0A-%20%u516C%u8BA4%u7AEF%u53E3%uFF08Well%20Known%20Ports%uFF09%uFF1A%u4ECE0%u52301023%uFF0C%u5B83%u4EEC%u7D27%u5BC6%u7ED1%u5B9A%uFF08Binding%uFF09%u4E00%u4E9B%u670D%u52A1%u3002%0A%0A-%20%u6CE8%u518C%u7AEF%u53E3%uFF08Registered%20Ports%uFF09%uFF1A%u4ECE1024%u523049151%u3002%u5B83%u4EEC%u677E%u6563%u5730%u7ED1%u5B9A%u4E00%u4E9B%u670D%u52A1%u3002%0A%0A-%20%u52A8%u6001%u548C/%u6216%u79C1%u6709%u7AEF%u53E3%uFF08Dynamic%20and/or%20Private%20Ports%uFF09%uFF1A%u4ECE49152%u523065535%uFF0C%u8FD9%u4E9B%u7AEF%u53E3%u662F%u5E94%u7528%u7A0B%u5E8F%u4F7F%u7528%u7684%u52A8%u6001%u7AEF%u53E3%uFF0C%u5E94%u7528%u7A0B%u5E8F%u4E00%u822C%u4E0D%u4F1A%u4E3B%u52A8%u4F7F%u7528%u8FD9%u4E9B%u7AEF%u53E3%u3002%0A%0A%23%23%233.%u7F51%u7EDC%u4F53%u7CFB%u53C2%u8003%u6A21%u578B%0AOSI%28Open%20System%20Interconnection%29%u53C2%u8003%u6A21%u578B%u5C06%u7F51%u7EDC%u7684%u4E0D%u540C%u529F%u80FD%u5212%u5206%u4E3A7%u5C42%uFF1A%0A%0A%u5E94%u7528%u5C42%uFF1A%u5904%u7406%u7F51%u7EDC%u5E94%u7528%0A%0A%u8868%u793A%u5C42%uFF1A%u6570%u636E%u8868%u793A%0A%0A%u4F1A%u8BDD%u5C42%uFF1A%u4E3B%u673A%u95F4%u901A%u4FE1%0A%0A%u4F20%u8F93%u5C42%uFF1A%u7AEF%u5230%u7AEF%u7684%u8FDE%u63A5%0A%0A%u7F51%u7EDC%u5C42%uFF1A%u5BFB%u5740%u548C%u6700%u77ED%u8DEF%u5F84%0A%0A%u6570%u636E%u94FE%u8DEF%u5C42%uFF1A%u4ECB%u8D28%u8BBF%u95EE%uFF08%u63A5%u5165%uFF09%0A%0A%u7269%u7406%u5C42%uFF1A%u4E8C%u8FDB%u5236%u4F20%u8F93%0A%0A%60%u901A%u4FE1%u5B9E%u4F53%u7684%u5BF9%u7B49%u5C42%u4E4B%u95F4%u4E0D%u5141%u8BB8%u76F4%u63A5%u901A%u4FE1%uFF0C%u5404%u5C42%u4E4B%u95F4%u662F%u4E25%u683C%u7684%u5355%u5411%u4F9D%u8D56%uFF0C%u4E0A%u5C42%uFF08Service%20user%uFF09%u4F7F%u7528%u4E0B%u5C42%u63D0%u4F9B%u7684%u670D%u52A1%uFF0C%u4E0B%u5C42%uFF08Service%20provider%uFF09%u5411%u4E0A%u5C42%u63D0%u4F9B%u670D%u52A1%u3002%60%0A%0A%60%u5BF9%u7B49%u5C42%u901A%u4FE1%u7684%u5B9E%u8D28%uFF1A%u5BF9%u7B49%u5C42%u5B9E%u4F53%u4E4B%u95F4%u865A%u62DF%u901A%u4FE1%uFF0C%u4E0B%u5C42%u5411%u4E0A%u5C42%u63D0%u4F9B%u670D%u52A1%uFF0C%u5B9E%u9645%u901A%u4FE1%u5728%u6700%u5E95%u5C42%u5B8C%u6210%u3002%60%0A%0A**OSI%u5404%u5C42%u6240%u4F7F%u7528%u7684%u534F%u8BAE%uFF1A**%0A%0A%u5E94%u7528%u5C42%uFF1ATelnet%u3001FTP%u3001HTTP%u3001DNS%u3001SMTP%u3001POP3%0A%0A%u4F20%u8F93%u5C42%uFF1ATCP%u3001UDP%20%09%28%20%u5176%u4E2DTCP%uFF1A%u9762%u5411%u8FDE%u63A5%u7684%u53EF%u9760%u7684%u4F20%u8F93%u534F%u8BAE%u3002UDP%uFF1A%u662F%u65E0%u8FDE%u63A5%u7684%uFF0C%u4E0D%u53EF%u9760%u7684%u4F20%u8F93%u534F%u8BAE%u3002%29%0A%0A%u7F51%u7EDC%u5C42%uFF1AIP%u3001ICMP%u3001IGMP%0A%0A%0A%21%5BAlt%20text%5D%28./QQ%u622A%u56FE20161009161909.jpg%29%0A%23%23%234.%u6570%u636E%u5C01%u88C5%0A%u3000%u4E00%u53F0%u8BA1%u7B97%u673A%u8981%u53D1%u9001%u6570%u636E%u5230%u53E6%u4E00%u53F0%u8BA1%u7B97%u673A%uFF0C%u6570%u636E%u9996%u5148%u5FC5%u987B%u6253%u5305%uFF0C%u6253%u5305%u7684%u8FC7%u7A0B%u79F0%u4E3A%u5C01%u88C5%u3002%0A%0A%60%u5C01%u88C5%u5C31%u662F%u5728%u6570%u636E%u524D%u9762%u52A0%u4E0A%u7279%u5B9A%u7684%u534F%u8BAE%u5934%u90E8%u3002%60%0A%0AOSI%u53C2%u8003%u6A21%u578B%u4E2D%uFF0C%u5BF9%u7B49%u5C42%u534F%u8BAE%u4E4B%u95F4%u7684%u4EA4%u6362%u7684%u4FE1%u606F%u5355%u5143%u79F0%u4E3A%u534F%u8BAE%u6570%u636E%u5355%u5143%uFF08PDU%2C%20Protocol%20Data%20Unit%uFF09%u3002%0A%0AOSI%u53C2%u8003%u6A21%u578B%u4E2D%u7684%u6BCF%u4E00%u5C42%u90FD%u8981%u4F9D%u9760%u4E0B%u4E00%u5C42%u63D0%u4F9B%u7684%u670D%u52A1%u3002%0A%0A%u4E3A%u4E86%u63D0%u4F9B%u670D%u52A1%uFF0C%u4E0B%u5C42%u628A%u4E0A%u5C42%u7684PDU%u4F5C%u4E3A%u672C%u5C42%u7684%u6570%u636E%u5C01%u88C5%uFF0C%u7136%u540E%u52A0%u5165%u672C%u5C42%u7684%u5934%u90E8%uFF08%u548C%u5C3E%u90E8%uFF09%u3002%u5934%u90E8%u4E2D%u542B%u6709%u5B8C%u6210%u6570%u636E%u4F20%u8F93%u6240%u9700%u7684%u63A7%u5236%u4FE1%u606F%u3002%0A%0A%u8FD9%u6837%uFF0C%u6570%u636E%u81EA%u4E0A%u800C%u4E0B%u9012%u4EA4%u7684%u8FC7%u7A0B%u5B9E%u9645%u4E0A%u5C31%u662F%u4E0D%u65AD%u5C01%u88C5%u7684%u8FC7%u7A0B%u3002%u5230%u8FBE%u76EE%u7684%u5730%u540E%u81EA%u4E0B%u800C%u4E0A%u9012%u4EA4%u7684%u8FC7%u7A0B%u5C31%u662F%u4E0D%u65AD%u62C6%u5C01%u7684%u8FC7%u7A0B%u3002%u7531%u6B64%u53EF%u77E5%uFF0C%u5728%u7269%u7406%u7EBF%u8DEF%u4E0A%u4F20%u8F93%u7684%u6570%u636E%uFF0C%u5176%u5916%u9762%u5B9E%u9645%u4E0A%u88AB%u5305%u5C01%u4E86%u591A%u5C42%u201C%u4FE1%u5C01%u201D%u3002%0A%0A%0A%23%23%u4E8C.InetAddress%u7C7B%0A-%20InetAddress%u7C7B%0AInetAddress%u7C7B%u7528%u6765%u5C01%u88C5%u6211%u4EEC%u524D%u9762%u8BA8%u8BBA%u7684%u6570%u5B57%u5F0F%u7684IP%u5730%u5740%u548C%u8BE5%u5730%u5740%u7684%u57DF%u540D%u3002%0AInetAddress%u7C7B%u5185%u90E8%u9690%u85CF%u4E86%u5730%u5740%u6570%u5B57%u3002%0A%0A---%0A-%20InetAddress%u7C7B%u4E2D%u7684%u5DE5%u5382%u65B9%u6CD5%0AInetAddress%u7C7B%u6CA1%u6709%u660E%u663E%u7684%u6784%u9020%u51FD%u6570%u3002%u4E3A%u751F%u6210%u4E00%u4E2AInetAddress%u5BF9%u8C61%uFF0C%u5FC5%u987B%u8FD0%u7528%u4E00%u4E2A%u53EF%u7528%u7684%u5DE5%u5382%u65B9%u6CD5%u3002%0A%u5DE5%u5382%u65B9%u6CD5%uFF08factory%20method%uFF09%u4EC5%u662F%u4E00%u4E2A%u7C7B%u4E2D%u9759%u6001%u65B9%u6CD5%u8FD4%u56DE%u4E00%u4E2A%u8BE5%u7C7B%u5B9E%u4F8B%u7684%u7EA6%u5B9A%u3002%0A%u5BF9%u4E8EInetAddress%uFF0C%u4E09%u4E2A%u65B9%u6CD5%3AgetLocalHost%28%29%u3001getByName%28%29%u4EE5%u53CAgetAllByName%28%29%u53EF%u4EE5%u7528%u6765%u521B%u5EFAInetAddress%u7684%u5B9E%u4F8B%u3002%0AgetLocalHost%28%29%u4EC5%u8FD4%u56DE%u8C61%u5F81%u672C%u5730%u4E3B%u673A%u7684InetAddress%u5BF9%u8C61%u3002%0A%0A----%0A-%20%u672C%u673A%u5730%u5740%u8FD8%u4E3Alocalhost%2C127.0.0.1%uFF0C%u8FD9%u4E09%u4E2A%u5730%u5740%u90FD%u662F%u4E00%u56DE%u4E8B%u3002%0A-%20getByName%28%29%u65B9%u6CD5%u8FD4%u56DE%u4E00%u4E2A%u4F20%u7ED9%u5B83%u7684%u4E3B%u673A%u540D%u7684InetAddress%u3002%0A-%20%u5982%u679C%u8FD9%u4E9B%u65B9%u6CD5%u4E0D%u80FD%u89E3%u6790%u4E3B%u673A%u540D%uFF0C%u5B83%u4EEC%u5F15%u53D1%u4E00%u4E2AUnknownHostException%u5F02%u5E38%u3002%0A-%20%u5728Internet%u4E0A%uFF0C%u7528%u4E00%u4E2A%u540D%u79F0%u6765%u4EE3%u8868%u591A%u4E2A%u673A%u5668%u662F%u5E38%u6709%u7684%u4E8B%u3002%0A-%20getAllByName%28%29%u5DE5%u5382%u65B9%u6CD5%u8FD4%u56DE%u4EE3%u8868%u7531%u4E00%u4E2A%u7279%u6B8A%u540D%u79F0%u5206%u89E3%u7684%u6240%u6709%u5730%u5740%u7684InetAddresses%u7C7B%u6570%u7EC4%u3002%0A-%20%u5728%u4E0D%u80FD%u628A%u540D%u79F0%u5206%u89E3%u6210%u81F3%u5C11%u4E00%u4E2A%u5730%u5740%u65F6%uFF0C%u5B83%u5C06%u5F15%u53D1%u4E00%u4E2AUnknownHostException%u5F02%u5E38%u3002%0A%0A---%0A%u53E6%u5916%2C%u5728SocketAddress%u4E2D%u7684%u5B50%u7C7BInetSocketAddress%20%2C%20%20%u6B64%u7C7B%u5B9E%u73B0%20IP%20%u5957%u63A5%u5B57%u5730%u5740%uFF08IP%20%u5730%u5740%20+%20%u7AEF%u53E3%u53F7%uFF09%u3002%0A%0A----%0A%60%60%60java%0Aimport%20java.net.*%3B%0Aclass%20%20InetAddressDemo%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09InetAddress%20ia%20%3D%20InetAddress.getLocalHost%28%29%3B//%u83B7%u53D6%u672C%u673AIP%u5730%u5740%0A%09%09System.out.println%28ia.getHostAddress%28%29%29%3B//%0A%09%09System.out.println%28ia.getHostName%28%29%29%3B%0A%0A%09%09InetAddress%5B%5D%20ia2%20%3D%20InetAddress.getAllByName%28%22www.baidu.com%22%29%3B%0A%09%09for%20%28int%20i%3D0%3Bi%3Cia2.length%20%3Bi++%20%29%0A%09%09%7B%0A%09%09%09System.out.println%28ia2%5Bi%5D.getHostAddress%28%29%29%3B%0A%09%09%09System.out.println%28ia2%5Bi%5D.getHostName%28%29%29%3B%0A%09%09%7D%0A%0A%09%7D%0A%7D%0A%0A%60%60%60%0A%0A%23%23%u4E09.UDP%0A%3EUDP%u662FUser%20Datagram%20Protocol%u7684%u7B80%u79F0%uFF0C%u662F%u4E00%u79CD%u65E0%u8FDE%u63A5%u7684%u534F%u8BAE%uFF0C%u6BCF%u4E2A%u6570%u636E%u62A5%u90FD%u662F%u4E00%u4E2A%u72EC%u7ACB%u7684%u4FE1%u606F%uFF0C%u5305%u62EC%u5B8C%u6574%u7684%u6E90%u5730%u5740%u6216%u76EE%u7684%u5730%u5740%uFF0C%u5B83%u5728%u7F51%u7EDC%u4E0A%u4EE5%u4EFB%u4F55%u53EF%u80FD%u7684%u8DEF%u5F84%u4F20%u5F80%u76EE%u7684%u5730%uFF0C%u56E0%u6B64%u80FD%u5426%u5230%u8FBE%u76EE%u7684%u5730%uFF0C%u5230%u8FBE%u76EE%u7684%u5730%u7684%u65F6%u95F4%u4EE5%u53CA%u5185%u5BB9%u7684%u6B63%u786E%u6027%u90FD%u662F%u4E0D%u80FD%u88AB%u4FDD%u8BC1%u7684%u3002%0A%0A%0A%23%23%231.%u7279%u70B9%0A%3E1%uFF0C%20%20%20%20%20%u6BCF%u4E2A%u6570%u636E%u62A5%u4E2D%u90FD%u7ED9%u51FA%u4E86%u5B8C%u6574%u7684%u5730%u5740%u4FE1%u606F%uFF0C%u56E0%u6B64%u65E0%u9700%u8981%u5EFA%u7ACB%u53D1%u9001%u65B9%u548C%u63A5%u6536%u65B9%u7684%u8FDE%u63A5%u3002%0A%0A%3E2%uFF0C%20%20%20%20%20UDP%u4F20%u8F93%u6570%u636E%u65F6%u662F%u6709%u5927%u5C0F%u9650%u5236%u7684%uFF0C%u6BCF%u4E2A%u88AB%u4F20%u8F93%u7684%u6570%u636E%u62A5%u5FC5%u987B%u9650%u5B9A%u572864KB%u4E4B%u5185%u3002%0A%0A%3E3%uFF0C%20%20%20%20%20UDP%u662F%u4E00%u4E2A%u4E0D%u53EF%u9760%u7684%u534F%u8BAE%uFF0C%u53D1%u9001%u65B9%u6240%u53D1%u9001%u7684%u6570%u636E%u62A5%u5E76%u4E0D%u4E00%u5B9A%u4EE5%u76F8%u540C%u7684%u6B21%u5E8F%u5230%u8FBE%u63A5%u6536%u65B9%0A%0A%3E4%2C%09%09UDP%u4E0D%u9700%u8981%u5EFA%u7ACB%u5EFA%u7ACB%u8FDE%u63A5%2C%20%u901F%u5EA6%u5FEB%0A%0A%3E5%2C%09%09UDP%u64CD%u4F5C%u7B80%u5355%uFF0C%u800C%u4E14%u4EC5%u9700%u8981%u8F83%u5C11%u7684%u76D1%u62A4%uFF0C%u56E0%u6B64%u901A%u5E38%u7528%u4E8E%u5C40%u57DF%u7F51%u9AD8%u53EF%u9760%u6027%u7684%u5206%u6563%u7CFB%u7EDF%u4E2Dclient/server%u5E94%u7528%u7A0B%u5E8F%2C%20%u591A%u7528%u4E8E%u89C6%u9891%u4F1A%u8BAE%2C%u684C%u9762%u5171%u4EAB%u4E4B%u7C7B%0A%0A%23%23%232.Java%u4E2D%u64CD%u4F5CUDP%0A%3E%u4F7F%u7528%u4F4D%u4E8EJDK%u4E2DJava.net%u5305%u4E0B%u7684DatagramSocket%u548CDatagramPacket%u7C7B%uFF0C%u53EF%u4EE5%u975E%u5E38%u65B9%u4FBF%u5730%u63A7%u5236%u7528%u6237%u6570%u636E%u62A5%u6587%u3002%0ADatagramSocket%u7C7B%uFF1A%u521B%u5EFA%u63A5%u6536%u548C%u53D1%u9001UDP%u7684Socket%u5B9E%u4F8B%0A%0A%60DatagramSocket%28%29%uFF1A%60%u521B%u5EFA%u5B9E%u4F8B%u3002%u901A%u5E38%u7528%u4E8E%u5BA2%u6237%u7AEF%u7F16%u7A0B%uFF0C%u5B83%u5E76%u6CA1%u6709%u7279%u5B9A%u76D1%u542C%u7684%u7AEF%u53E3%uFF0C%u4EC5%u4EC5%u4F7F%u7528%u4E00%u4E2A%u4E34%u65F6%u7684%u3002%0A%0A%60DatagramSocket%28int%20port%29%uFF1A%60%u521B%u5EFA%u6570%u636E%u62A5Socket%u5E76%u5C06%u5176%u7ED1%u5B9A%u5230%u672C%u5730%u4E3B%u673A%u4E0A%u7684%u6307%u5B9A%u7AEF%u53E3%u3002%u3002%0A%0A%60DatagramSocket%28int%20port%2C%20InetAddress%20localAddr%29%uFF1A%60%u8FD9%u662F%u4E2A%u975E%u5E38%u6709%u7528%u7684%u6784%u5EFA%u5668%uFF0C%u5F53%u4E00%u53F0%u673A%u5668%u62E5%u6709%u591A%u4E8E%u4E00%u4E2AIP%u5730%u5740%u7684%u65F6%u5019%uFF0C%u7531%u5B83%u521B%u5EFA%u7684%u5B9E%u4F8B%u4EC5%u4EC5%u63A5%u6536%u6765%u81EALocalAddr%u7684%u62A5%u6587%u3002%0A%0A%60receive%28DatagramPacket%20d%29%uFF1A%60%u63A5%u6536%u6570%u636E%u62A5%u6587%u5230d%u4E2D%u3002receive%u65B9%u6CD5%u4EA7%u751F%u4E00%u4E2A%u201C%u963B%u585E%u201D%u3002%0A%0A%60send%28DatagramPacket%20d%29%uFF1A%60%u53D1%u9001%u62A5%u6587d%u5230%u76EE%u7684%u5730%u3002%0A%0A%60setSoTimeout%28int%20timeout%29%uFF1A%60%u8BBE%u7F6E%u8D85%u65F6%u65F6%u95F4%uFF0C%u5355%u4F4D%u4E3A%u6BEB%u79D2%u3002%0A%0A%60close%28%29%uFF1A%60%u5173%u95EDDatagramSocket%u3002%u5728%u5E94%u7528%u7A0B%u5E8F%u9000%u51FA%u7684%u65F6%u5019%uFF0C%u901A%u5E38%u4F1A%u4E3B%u52A8%u91CA%u653E%u8D44%u6E90%uFF0C%u5173%u95EDSocket%uFF0C%u4F46%u662F%u7531%u4E8E%u5F02%u5E38%u5730%u9000%u51FA%u53EF%u80FD%u9020%u6210%u8D44%u6E90%u65E0%u6CD5%u56DE%u6536%u3002%u6240%u4EE5%uFF0C%u5E94%u8BE5%u5728%u7A0B%u5E8F%u5B8C%u6210%u65F6%uFF0C%u4E3B%u52A8%u4F7F%u7528%u6B64%u65B9%u6CD5%u5173%u95EDSocket%uFF0C%u6216%u5728%u6355%u83B7%u5230%u5F02%u5E38%u629B%u51FA%u540E%u5173%u95EDSocket%u3002%0A%0A%60DatagramPacket%uFF1A%60%u7528%u4E8E%u5904%u7406%u62A5%u6587%uFF0C%u5C06byte%u6570%u7EC4%u3001%u76EE%u6807%u5730%u5740%u3001%u76EE%u6807%u7AEF%u53E3%u7B49%u6570%u636E%u5305%u88C5%u6210%u62A5%u6587%u6216%u8005%u5C06%u62A5%u6587%u62C6%u5378%u6210byte%u6570%u7EC4%u3002%0A%0A%60DatagramPacket%28byte%5B%5D%20buf%2C%20int%20length%2C%20InetAddress%20addr%2C%20int%20port%29%uFF1A%60%20%u6784%u9020%u6570%u636E%u62A5%u5305%uFF0C%u7528%u6765%u5C06%u957F%u5EA6%u4E3A%20length%20%u7684%u5305%u53D1%u9001%u5230%u6307%u5B9A%u4E3B%u673A%u4E0A%u7684%u6307%u5B9A%u7AEF%u53E3%u53F7%u3002%0A%0A%60DatagramPacket%28byte%5B%5D%20buf%2C%20int%20offset%2C%20int%20length%2C%20InetAddress%20address%2C%20int%20port%29%uFF1A%60%u4ECEbuf%u6570%u7EC4%u4E2D%uFF0C%u53D6%u51FAoffset%u5F00%u59CB%u7684%u3001length%u957F%u7684%u6570%u636E%u521B%u5EFA%u6570%u636E%u5305%u5BF9%u8C61%uFF0C%u76EE%u6807%u662Faddr%u5730%u5740%uFF0Cport%u7AEF%u53E3%u3002%0A%0A%60DatagramPacket%28byte%5B%5D%20buf%2C%20int%20offset%2C%20int%20length%29%uFF1A%60%u6784%u9020%20DatagramPacket%uFF0C%u7528%u6765%u63A5%u6536%u957F%u5EA6%u4E3A%20length%20%u7684%u5305%uFF0C%u5728%u7F13%u51B2%u533A%u4E2D%u6307%u5B9A%u4E86%u504F%u79FB%u91CF%u3002%0A%0A%60DatagramPacket%28byte%5B%5D%20buf%2C%20int%20length%29%uFF1A%60%u6784%u9020%20DatagramPacket%uFF0C%u7528%u6765%u63A5%u6536%u957F%u5EA6%u4E3A%20length%20%u7684%u6570%u636E%u5305%u3002%0A%0A%60getData%28%29%uFF1A%60%u5B83%u4ECE%u5B9E%u4F8B%u4E2D%u53D6%u5F97%u62A5%u6587%u7684byte%u6570%u7EC4%u7F16%u7801%u3002%0A%0A%23%23%233.UDP%u5B9E%u73B0%u53D1%u9001%u548C%u63A5%u6536%0A%0A**1.%u53D1%u9001%u7AEF**%0A%60%60%60java%0A/*%0A%u9700%u6C42%3A%0A%u5B9A%u4E49%u53D1%u9001%u7AEF%2C%u901A%u8FC7udp%u4F20%u8F93%u65B9%u5F0F%2C%u5C06%u952E%u76D8%u5F55%u5165%u7684%u4E00%u6BB5%u6587%u5B57%u6570%u636E%u53D1%u9001%u51FA%u53BB%3B%0A%0A%u601D%u8DEF%3A%0A1.%u901A%u8FC7DatagramSocket%u5EFA%u7ACBudpsocket%u670D%u52A1%3B%0A2.%u63D0%u4F9B%u6570%u636E%2C%u5E76%u901A%u8FC7DatagramPacket%u5C06%u6570%u636E%u5C01%u88C5%u5230%u6570%u636E%u5305%u4E2D%3B%0A3.%u901A%u8FC7%u4E0A%u9762%u5EFA%u7ACB%u7684socket%u670D%u52A1%u7684%u53D1%u9001%u529F%u80FD%u5C06%u6570%u636E%u53D1%u9001%u51FA%u53BB%3B%0A4.%u5173%u95ED%u8D44%u6E90%3B%0A*/%0Aimport%20java.net.*%3B%0Aimport%20java.io.*%3B%0Aclass%20%20UdpSendDemo%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09DatagramSocket%20ds%20%3D%20new%20DatagramSocket%2810004%29%3B//%u5C06%u8BE5socket%u7ED1%u5B9A%u5728%u8BE5%u4E3B%u673A%u768410004%u6307%u5B9A%u7AEF%u53E3%2C%u4ECE%u8FD9%u4E2A%u7AEF%u53E3%u53D1%u9001%0A%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28System.in%29%29%3B%0A%09%09String%20line%20%3D%20null%3B%0A%09%09while%20%28%28line%3Dbufr.readLine%28%29%29%20%21%3Dnull%29%0A%09%09%7B%0A%09%09%09if%20%28line.equals%28%22886%22%29%29//%u7528%u4E00%u4E2A%22886%22%u7684%u6807%u8BC6%u7B26%u6765%u8BA9%u5FAA%u73AF%u505C%u6B62%0A%09%09%09%7B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%09byte%5B%5D%20buf%20%3D%20line.getBytes%28%29%3B%0A%09%09%09DatagramPacket%20dp%20%3D%20new%20DatagramPacket%28buf%2Cbuf.length%2CInetAddress.getLocalHost%28%29%2C10000%29%3B//%u4ECE%u6307%u5B9A%u8BE5%u4E3B%u673A%u6307%u5B9A%u7AEF%u53E310000%u53D1%u9001buf%u5B57%u7B26%u4E32%u4E2D%u4E00%u6BB5%u6570%u636E%0A%09%09%09ds.send%28dp%29%3B//%u7528%u8BE5socket%u53D1%u9001dp%u6570%u636E%u5305%0A%09%09%7D%0A%09%09ds.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A%0A---%0A**2.%u63A5%u6536%u7AEF**%0A%60%60%60java%0A/*%0A%u9700%u6C42%3A%0A%u5B9A%u4E49%u63A5%u6536%u7AEF%2C%u63A5%u6536udp%u534F%u8BAE%u63A5%u6536%u7684%u6570%u636E%u5E76%u8FDB%u884C%u5904%u7406%3B%0A%0A%u601D%u8DEF%3A%0A1.%u901A%u8FC7DatagramSocket%u5EFA%u7ACBudp%20socket%u670D%u52A1%3B%0A2.%u901A%u8FC7DatagramPacket%u5B9A%u4E49%u6570%u636E%u5305%2C%u7528%u4E8E%u5B58%u50A8%u63A5%u6536%u5230%u7684%u6570%u636E%3B%0A3.%u901A%u8FC7%u4E0A%u9762%u5EFA%u7ACB%u529F%u80FD%u5C06%u63A5%u6536%u5230%u7684%u6570%u636E%u5B58%u5165%u5DF2%u5B9A%u4E49%u597D%u7684%u6570%u636E%u5305%u4E2D%3B%0A4.%u901A%u8FC7%u6570%u636E%u5305%u7279%u6709%u7684%u65B9%u6CD5%u6765%u64CD%u4F5C%u7684socket%u670D%u52A1%u7684%u63A5%u6536%u6570%u636E%3B%0A5.%u5173%u95ED%u8D44%u6E90%3B%0A*/%0Aimport%20java.net.*%3B%0Aclass%20%20UdpReceDemo%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09DatagramSocket%20ds%20%3D%20new%20DatagramSocket%2810000%29%3B//%u5C06%u8BE5socket%u7ED1%u5B9A%u5728%u8BE5%u4E3B%u673A%u768410000%u6307%u5B9A%u7AEF%u53E3%2C%u7528%u4E8E%u76D1%u542C%u8BE5%u7AEF%u53E3%u7684%u6570%u636E%0A%09%09while%20%28true%29%0A%09%09%7B%0A%09%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09%09DatagramPacket%20dp%20%3D%20new%20DatagramPacket%28buf%2Cbuf.length%29%3B//%u6784%u9020%20DatagramPacket%uFF0C%u7528%u6765%u63A5%u6536%u957F%u5EA6%u4E3A%20length%20%u7684%u6570%u636E%u5305%u3002%0A%09%09%09ds.receive%28dp%29%3B%09%09%0A%09%09%09String%20address%20%3D%20dp.getAddress%28%29.getHostAddress%28%29%3B//%u56E0%u4E3AgetAddress%28%29%u8FD4%u56DE%u7684%u662FInetAddress%u7C7B%0A%09%09%09String%20data%20%3D%20new%20String%28dp.getData%28%29%2C0%2Cdp.getLength%28%29%29%3B%0A%09%09%09int%20port%20%3D%20dp.getPort%28%29%3B%0A%09%09%09System.out.println%28address+%22%3A%3A%22+data+%22%3A%3A%22+port%29%3B%0A%09%09%09//ds.close%28%29%3B%u56E0%u4E3A%u4E00%u822C%u63A5%u6536%u7AEF%u4F1A%u4E00%u76F4%u5F00%u7B49%u5F85%u63A5%u6536%u6570%u636E%0A%09%09%7D%0A%0A%09%7D%0A%7D%0A%60%60%60%0A%23%23%234.%u5229%u7528%u591A%u7EBF%u7A0B%u5728%u4E00%u4E2A%u7A0B%u5E8F%u91CC%u9762%u5B9E%u73B0%u53D1%u9001%u63A5%u6536%0A%60%60%60java%0A/*%0A%u5229%u7528%u591A%u7EBF%u7A0B%2C%u5C06%u53D1%u9001%u7AEF%u548C%u63A5%u6536%u7AEF%u653E%u5728%u4E00%u4E2A%u7A0B%u5E8F%u4E0B%u8FD0%u884C%2C%u7C7B%u4F3CQQ%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20%20ChatDemo%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09DatagramSocket%20sendsocket%20%3D%20new%20DatagramSocket%28%29%3B%0A%09%09DatagramSocket%20recesocket%20%3D%20new%20DatagramSocket%2810003%29%3B%0A%09%09new%20Thread%28new%20Send%28sendsocket%29%29.start%28%29%3B%0A%09%09new%20Thread%28new%20Rece%28recesocket%29%29.start%28%29%3B%0A%09%7D%0A%7D%0Aclass%20Send%20implements%20Runnable%0A%7B%0A%09private%20DatagramSocket%20ds%3B%0A%09Send%28DatagramSocket%20ds%29%0A%09%7B%0A%09%09this.ds%20%3D%20ds%3B%0A%09%7D%0A%09public%20void%20run%28%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28System.in%29%29%3B%0A%09%09%09String%20line%20%3D%20null%3B%0A%09%09%09while%20%28%28line%3Dbufr.readLine%28%29%29%21%3Dnull%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28line.equals%28%22886%22%29%29%0A%09%09%09%09%7B%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%0A%09%09%09%09byte%5B%5D%20buf%20%3D%20line.getBytes%28%29%3B%0A%09%09%09%09DatagramPacket%20dp%20%3D%20new%20DatagramPacket%28buf%2Cbuf.length%2CInetAddress.getLocalHost%28%29%2C10003%29%3B%0A%09%09%09%09ds.send%28dp%29%3B%0A%09%09%09%7D%0A%09%09%09ds.close%28%29%3B%09%09%09%0A%09%09%7D%0A%09%09catch%20%28Exception%20e%29%0A%09%09%7B%0A%09%09%09throw%20new%20RuntimeException%28%22%u53D1%u9001%u7AEF%u51FA%u9519%22%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0Aclass%20Rece%20implements%20Runnable%0A%7B%0A%09private%20DatagramSocket%20ds%3B%0A%09Rece%28DatagramSocket%20ds%29%0A%09%7B%0A%09%09this.ds%20%3D%20ds%3B%0A%09%7D%0A%09public%20void%20run%28%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09%09%09DatagramPacket%20dp%20%3D%20new%20DatagramPacket%28buf%2Cbuf.length%29%3B%0A%09%09%09%09ds.receive%28dp%29%3B%0A%09%09%09%09String%20address%20%3D%20dp.getAddress%28%29.getHostAddress%28%29%3B%0A%09%09%09%09String%20data%20%3D%20new%20String%28dp.getData%28%29%2C0%2Cdp.getLength%28%29%29%3B%0A%09%09%09%09int%20port%20%3D%20dp.getPort%28%29%3B%0A%09%09%09%09System.out.println%28address+%22%3A%3A%22+data+%22%3A%3A%22+port%29%3B%0A%09%09%09%7D%09%09%09%0A%09%09%7D%0A%09%09catch%20%28Exception%20e%20%29%0A%09%09%7B%0A%09%09%09throw%20new%20RuntimeException%28%22%u63A5%u6536%u7AEF%u51FA%u9519%22%29%3B%0A%09%09%7D%0A%0A%0A%09%7D%0A%7D%0A%60%60%60%0A%0A%23%23%u56DB.TCP%0A%3E-%20TCP%u662FTranfer%20Control%20Protocol%u7684%u7B80%u79F0%uFF0C%u662F%u4E00%u79CD%u9762%u5411%u8FDE%u63A5%u7684%u4FDD%u8BC1%u53EF%u9760%u4F20%u8F93%u7684%u534F%u8BAE%u3002%0A%3E-%20%u901A%u8FC7TCP%u534F%u8BAE%u4F20%u8F93%uFF0C%u5F97%u5230%u7684%u662F%u4E00%u4E2A%u987A%u5E8F%u7684%u65E0%u5DEE%u9519%u7684%u6570%u636E%u6D41%u3002%0A%3E-%20%u53D1%u9001%u65B9%u548C%u63A5%u6536%u65B9%u7684%u6210%u5BF9%u7684%u4E24%u4E2A%20socket%u4E4B%u95F4%u5FC5%u987B%u5EFA%u7ACB%u8FDE%u63A5%uFF0C%u4EE5%u4FBF%u5728TCP%u534F%u8BAE%u7684%u57FA%u7840%u4E0A%u8FDB%u884C%u901A%u4FE1%uFF0C%u5F53%u4E00%u4E2Asocket%uFF08%u901A%u5E38%u90FD%u662Fserver%20socket%uFF09%u7B49%u5F85%u5EFA%u7ACB%u8FDE%u63A5%u65F6%uFF0C%u53E6%u4E00%u4E2Asocket%u53EF%u4EE5%u8981%u6C42%u8FDB%u884C%u8FDE%u63A5%uFF0C%u4E00%u65E6%u8FD9%u4E24%u4E2Asocket%u8FDE%u63A5%u8D77%u6765%uFF0C%u5B83%u4EEC%u5C31%u53EF%u4EE5%u8FDB%u884C%u53CC%u5411%u6570%u636E%u4F20%u8F93%uFF0C%u53CC%u65B9%u90FD%u53EF%u4EE5%u8FDB%u884C%u53D1%u9001%u6216%u63A5%u6536%u64CD%u4F5C%u3002%0A%0A%23%23%231.%u7279%u70B9%0A1%uFF0C%20%20%u9762%u5411%u8FDE%u63A5%u7684%u534F%u8BAE%uFF0C%u5728socket%u4E4B%u95F4%u8FDB%u884C%u6570%u636E%u4F20%u8F93%u4E4B%u524D%u5FC5%u7136%u8981%u5EFA%u7ACB%u8FDE%u63A5%28%u901A%u8FC7%u4E09%u6B21%u63E1%u624B%u5EFA%u7ACB%u8FDE%u63A5%29%2C%u6240%u4EE5%u5728TCP%u4E2D%u9700%u8981%u8FDE%u63A5%u65F6%u95F4%u3002%0A%0A2%uFF0C%20%20TCP%u4E00%u65E6%u8FDE%u63A5%u5EFA%u7ACB%u8D77%u6765%uFF0C%u53CC%u65B9%u7684socket%u5C31%u53EF%u4EE5%u6309%u7EDF%u4E00%u7684%u683C%u5F0F%u4F20%u8F93%u5927%u7684%u6570%u636E%u3002%0A%0A3%uFF0C%20%20TCP%u662F%u4E00%u4E2A%u53EF%u9760%u7684%u534F%u8BAE%uFF0C%u5B83%u786E%u4FDD%u63A5%u6536%u65B9%u5B8C%u5168%u6B63%u786E%u5730%u83B7%u53D6%u53D1%u9001%u65B9%u6240%u53D1%u9001%u7684%u5168%u90E8%u6570%u636E%u3002%0A%0A4%uFF0C%09%20%u56E0%u4E3A%u9700%u8981%u5EFA%u7ACB%u8FDE%u63A5%2C%u6548%u7387%u504F%u4F4E%u3002%0A%0A%23%23%232.TCP%u5B9E%u73B0%u53D1%u9001%u63A5%u6536%0A%0A**1.%u5BA2%u6237%u7AEF**%0A%60%60%60java%0ATCP%u5206%u4E3A%u5BA2%u6237%u7AEF%u548C%u670D%u52A1%u7AEF%2C%u5BA2%u6237%u7AEF%u7684%u5BF9%u8C61%u662FSocket%2C%u670D%u52A1%u7AEF%u7684%u5BF9%u8C61%u662FServerSocket%0A%0A%u5B9A%u4E49%u5BA2%u6237%u7AEF%u6B65%u9AA4%3A%0A1.%u521B%u5EFASocket%u670D%u52A1%2C%u5E76%u8FDE%u63A5%u6307%u5B9A%u4E3B%u673A%u548C%u7AEF%u53E3%3B%0A%0A2.%u4E3A%u4E86%u53D1%u9001%u6570%u636E%2C%u83B7%u53D6Socket%u6D41%u4E2D%u7684%u8F93%u51FA%u6D41%3B%0A%0A%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20TcpClientDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09Socket%20s%20%3D%20new%20Socket%28InetAddress.getLocalHost%28%29%2C10004%29%3B%0A%09%09OutputStream%20ops%20%3D%20s.getOutputStream%28%29%3B%0A%09%09byte%5B%5D%20buf%20%3D%20%22%u670D%u52A1%u7AEF%2C%u4F60%u597D%22.getBytes%28%29%3B%0A%09%09ops.write%28buf%29%3B%0A%0A%09%09//%u63A5%u6536%u670D%u52A1%u7AEF%u53D1%u9001%u8FC7%u6765%u7684%u6570%u636E%0A%09%09InputStream%20ips%20%3D%20s.getInputStream%28%29%3B%0A%09%09byte%5B%5D%20buf2%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09int%20len%20%3D%20ips.read%28buf2%29%3B%0A%09%09System.out.println%28new%20String%28buf2%2C0%2Clen%29%29%3B%0A%09%09s.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A%0A**2.%u670D%u52A1%u7AEF**%0A%60%60%60java%0A/*%0A%u5B9A%u4E49%u670D%u52A1%u7AEF%u6B65%u9AA4%3A%0A1.%u5EFA%u7ACB%u670D%u52A1%u7AEF%u7684Socket%u670D%u52A1%2CServerSocket%3B%0A2.%u83B7%u53D6%u8FDE%u63A5%u8FC7%u6765%u7684%u5BA2%u6237%u7AEF%u5BF9%u8C61%2C%u901A%u8FC7ServerSocket%u91CC%u7684accept%28%29%u65B9%u6CD5%2C%u6CA1%u6709%u8FDE%u63A5%u5219%u4F1A%u7B49%u5F85%2C%u8BE5%u65B9%u6CD5%u662F%u963B%u585E%u5F0F%u65B9%u6CD5%3B%0A3.%u901A%u8FC7%u83B7%u53D6%u5230%u7684%u5BA2%u6237%u7AEF%u7684Socket%u5BF9%u8C61%u7684%u8BFB%u53D6%u6D41InputStream%2C%u6765%u63A5%u6536%u4FE1%u606F%3B%0A4.%u5173%u95ED%u670D%u52A1%u5668%3B%0A%0AServerSocket%u91CC%u9762%u6709%u6784%u9020%u65B9%u6CD5ServerSocket%28int%20port%2Cint%20backlog%29%2C%u5176%u4E2Dbacklog%u4EE3%u8868%u670D%u52A1%u5141%u8BB8%u7684%u6700%u5927%u8FDE%u63A5%u6570%0A%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20TcpServerDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09ServerSocket%20ss%20%3D%20new%20ServerSocket%2810004%29%3B%0A%09%09Socket%20s%20%3D%20ss.accept%28%29%3B%0A%09%09InputStream%20ips%20%3D%20s.getInputStream%28%29%3B%0A%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09int%20num%20%3D%20ips.read%28buf%29%3B%0A%09%09String%20data%20%3D%20new%20String%28buf%2C0%2Cnum%29%3B%0A%09%09String%20ip%20%3D%20s.getInetAddress%28%29.getHostAddress%28%29%3B%0A%09%09System.out.println%28data+%22%3A%3A%22+ip%29%3B%0A%0A%09%09//%u7ED9%u5BA2%u6237%u7AEF%u53CD%u9988%u6570%u636E%0A%09%09OutputStream%20ops%20%3D%20s.getOutputStream%28%29%3B%0A%09%09ops.write%28%22%u6536%u5230%u6D88%u606F%2C%u4F60%u4E5F%u597D%u554A%22.getBytes%28%29%29%3B%0A%0A%09%09s.close%28%29%3B%0A%09%09ss.close%28%29%3B%0A%09%7D%0A%7D%0A%60%60%60%0A%23%23%233.%u5EFA%u7ACB%u4E00%u4E2A%u6587%u672C%u8F6C%u6362%u670D%u52A1%u5668%0A%u9700%u6C42%3A%u5EFA%u7ACB%u4E00%u4E2A%u6587%u672C%u8F6C%u6362%u670D%u52A1%u5668.%0A%u5BA2%u6237%u7AEF%u7ED9%u670D%u52A1%u5668%u53D1%u9001%u6587%u672C%2C%u670D%u52A1%u7AEF%u5C06%u6587%u672C%u8F6C%u6210%u5927%u5199%u8FD4%u56DE%u7ED9%u5BA2%u6237%u7AEF%2C%20%u5E76%u4E14%u5BA2%u6237%u7AEF%u53EF%u4EE5%u4E0D%u65AD%u7684%u8FDB%u884C%u6587%u672C%u8F6C%u6362%2C%u5F53%u5BA2%u6237%u7AEF%u8F93%u5165over%u65F6%u7ED3%u675F.%0A%0A%0A**1.%u5BA2%u6237%u7AEF**%0A%u5BA2%u6237%u7AEF%3A%0A%u7528IO%u7684%u601D%u60F3%u6765%u601D%u8003%2C%0A%u6E90%3A%u952E%u76D8%u5F55%u5165.%0A%u76EE%u7684%3A%u7F51%u7EDC%u8BBE%u5907%2C%u7F51%u7EDC%u8F93%u51FA%u6D41.%0A%u64CD%u4F5C%u7684%u662F%u6587%u672C%u6570%u636E%2C%u53EF%u4EE5%u9009%u62E9%u5B57%u7B26%u6D41.%0A%0A%u6B65%u9AA4%3A%0A1.%u5EFA%u7ACB%u670D%u52A1%3B%0A2.%u83B7%u53D6%u952E%u76D8%u5F55%u5165%3B%0A3.%u5C06%u6570%u636E%u53D1%u9001%u7ED9%u670D%u52A1%u7AEF%3B%0A4.%u83B7%u53D6%u670D%u52A1%u7AEF%u8FD4%u56DE%u7684%u6570%u636E%3B%0A%60%60%60java%0A/*%0A%u8BE5%u4F8B%u5B50%u5BB9%u6613%u51FA%u73B0%u7684%u95EE%u9898%3A%u670D%u52A1%u7AEF%u548C%u5BA2%u6237%u7AEF%u83AB%u540D%u7684%u90FD%u7B49%u5F85%3B%0A%u56E0%u4E3A%u5BA2%u6237%u7AEF%u548C%u670D%u52A1%u7AEF%u90FD%u6709%u963B%u585E%u5F0F%u65B9%u6CD5%2C%u8FD9%u4E9B%u65B9%u6CD5%u6CA1%u6709%u8BFB%u5230%u7ED3%u675F%u6807%u8BB0%2C%u8981%u4E48%u6570%u636E%u6CA1%u6709%u4ECE%u7F13%u51B2%u533A%u5237%u51FA%u6216%u8005%u6CA1%u6709%u8BFB%u5230%u6362%u884C%u7B26%5Cr%5Cn%3B%0A%0A*/%0A%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20TransClientDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09Socket%20s%20%3D%20new%20Socket%28InetAddress.getLocalHost%28%29%2C10005%29%3B%0A%09%09//%u5B9A%u4E49%u8BFB%u53D6%u952E%u76D8%u6570%u636E%u7684%u6D41%u5BF9%u8C61%0A%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28System.in%29%29%3B%0A%09%09//%u76EE%u7684%2C%u5C06%u6570%u636E%u5199%u5165%u5230socket%u8F93%u51FA%u6D41%2C%u53D1%u7ED9%u670D%u52A1%u7AEF%0A%09%09BufferedWriter%20bufout%20%3D%20new%20BufferedWriter%28new%20OutputStreamWriter%28s.getOutputStream%28%29%29%29%3B%0A%09%09//%u8FD9%u91CC%u7528%u7528PrintWriter%u6765%u4EE3%u66FF%u4E0A%u9762%u7684bufout%3APrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%0A%09%09//%u5B9A%u4E49%u4E00%u4E2Asocket%u8BFB%u53D6%u6D41%2C%u8BFB%u53D6%u670D%u52A1%u7AEF%u8FD4%u56DE%u7684%u6570%u636E%0A%09%09BufferedReader%20bufin%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%09%09%0A%09%09String%20line%20%3D%20null%3B%0A%09%09while%20%28%28line%3Dbufr.readLine%28%29%29%20%21%3Dnull%29%0A%09%09%7B%0A%09%09%09if%20%28%22over%22.equals%28line%29%29%0A%09%09%09%7B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%09bufout.write%28line%29%3B//%u5C06%u6570%u636E%u5199%u5165socket%u8F93%u51FA%u6D41%0A%09%09%09bufout.newLine%28%29%3B//%u56E0%u4E3A%u670D%u52A1%u7AEF%u7684readLine%28%29%u65B9%u6CD5%u4EE5%5Cr%5Cn%u6765%u5224%u65AD%u7ED3%u675F%u6807%u8BB0%2C%u5982%u679C%u6CA1%u6709%u5219%u4F1A%u4E00%u76F4%u963B%u585E%2C%u6240%u4EE5%u52A0%u5165%u6362%u884C%u7B26%0A%09%09%09bufout.flush%28%29%3B//%u5FC5%u987B%u5C06%u7F13%u51B2%u533A%u91CC%u9762%u6570%u636E%u5237%u51FA%0A%09%09%09//%u5982%u679C%u4E0A%u9762%u7528%u4E86PrintWriter%u7684%u8BDD%2C%u8FD9%u91CC%u4E0A%u9762%u4E09%u884C%u53EF%u4EE5%u76F4%u63A5%u7528out.println%28line%29%0A%09%09%09String%20str%20%3D%20bufin.readLine%28%29%3B//%u8BFB%u53D6%u670D%u52A1%u7AEF%u8FD4%u56DE%u7684%u6570%u636E%0A%09%09%09System.out.println%28%22Server%3A%22+str%29%3B%0A%09%09%7D%0A%09%09s.close%28%29%3B%0A%09%09bufr.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A**%u670D%u52A1%u7AEF**%0A%60%60%60java%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20TransServerDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09ServerSocket%20ss%20%3D%20new%20ServerSocket%2810005%29%3B%0A%09%09Socket%20s%20%3D%20ss.accept%28%29%3B%0A%09%09//%u8BFB%u53D6socket%u8BFB%u53D6%u6D41%u4E2D%u7684%u6570%u636E%0A%09%09BufferedReader%20bufin%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%0A%09%09//%u76EE%u7684%2Csocket%u8F93%u51FA%u6D41%2C%u5C06%u5927%u5199%u6570%u636E%u5199%u5165socket%u8F93%u51FA%u6D41%0A%09%09BufferedWriter%20bufout%20%3D%20new%20BufferedWriter%28new%20OutputStreamWriter%28s.getOutputStream%28%29%29%29%3B%0A%09%09//%u8FD9%u91CC%u7528%u7528PrintWriter%u6765%u4EE3%u66FF%u4E0A%u9762%u7684bufout%3APrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%0A%09%09String%20line%20%3D%20null%3B%0A%09%09while%20%28%28line%3Dbufin.readLine%28%29%29%20%21%3Dnull%29%0A%09%09%7B%0A%09%09%09System.out.println%28line%29%3B%0A%09%09%09bufout.write%28line.toUpperCase%28%29%29%3B%0A%09%09%09bufout.newLine%28%29%3B%0A%09%09%09bufout.flush%28%29%3B%0A%09%09%09//%u5982%u679C%u4E0A%u9762%u7528%u4E86PrintWriter%u7684%u8BDD%2C%u8FD9%u91CC%u4E0A%u9762%u4E09%u884C%u53EF%u4EE5%u76F4%u63A5%u7528out.println%28line%29%0A%09%09%7D%0A%09%09s.close%28%29%3B%0A%09%09ss.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A---%0A%23%23%234.%u5BA2%u6237%u7AEF%u5411%u670D%u52A1%u5668%u53D1%u9001%u6587%u672C%u6587%u4EF6%0A**1.%u5BA2%u6237%u7AEF**%0A%60%60%60java%0A/*%0A%u5C06%u6587%u4EF6%u4ECE%u5BA2%u6237%u7AEF%u4E0A%u4F20%u5230%u670D%u52A1%u7AEF%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20UploadClientDemo%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09Socket%20s%20%3D%20new%20Socket%28InetAddress.getLocalHost%28%29%2C10005%29%3B%0A%09%09%0A%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20FileReader%28%22CopyDemo.java%22%29%29%3B%0A%0A%09%09PrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%3B%0A%0A%09%09BufferedReader%20in%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%0A%09%09String%20line%20%3D%20null%3B%0A%09%09while%20%28%28line%3Dbufr.readLine%28%29%29%21%3Dnull%29%0A%09%09%7B%0A%09%09%09out.println%28line%29%3B%0A%09%09%7D%0A%09%09out.println%28%22over%22%29%3B//%u53D1%u9001%u4E00%u4E2A%u7ED3%u675F%u6807%u8BB0%2C%u7136%u540E%u670D%u52A1%u7AEF%u4F1A%u4E00%u76F4%u7B49%u5F85%0A%09%09//%u5728%u5B9E%u9645%u5F00%u53D1%u4E2D%2C%u76F4%u63A5%u7528s.shutdownOutput%28%29%2C%u4EE5%u6B64%u6765%u5173%u95ED%u53D1%u9001%u6D41%2C%u540C%u65F6%u670D%u52A1%u7AEF%u5C31%u6536%u5230%u4E00%u4E2A%u7ED3%u675F%u6807%u8BB0%0A%09%09String%20str%20%3D%20in.readLine%28%29%3B%0A%09%09System.out.println%28str%29%3B%0A%09%09s.close%28%29%3B%0A%09%09bufr.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A---%0A**2.%u670D%u52A1%u7AEF**%0A%60%60%60java%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20UploadServerDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09ServerSocket%20ss%20%3D%20new%20ServerSocket%2810005%29%3B%0A%09%09Socket%20s%20%3D%20%20ss.accept%28%29%3B%0A%09%09BufferedReader%20in%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%0A%09%09PrintWriter%20bufw%20%3D%20new%20PrintWriter%28new%20FileWriter%28%22e%3A%5C%5Chaha.txt%22%29%2Ctrue%29%3B%0A%09%09PrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%3B%0A%0A%09%09String%20line%20%3D%20null%3B%0A%09%09while%20%28%28line%3Din.readLine%28%29%29%21%3Dnull%29%0A%09%09%7B%0A%09%09%09if%20%28%22over%22.equals%28line%29%29%0A%09%09%09%7B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%09bufw.println%28line%29%3B%0A%09%09%7D%0A%09%0A%09%09out.println%28%22%u53D1%u9001%u6210%u529F%22%29%3B%0A%09%09s.close%28%29%3B%0A%09%09ss.close%28%29%3B%0A%09%09bufw.close%28%29%3B%0A%09%09%0A%09%7D%0A%7D%0A%60%60%60%0A%0A%23%23%235.%u5BA2%u6237%u7AEF%u5411%u670D%u52A1%u5668%u53D1%u9001%u56FE%u7247%0A**1.%u5BA2%u6237%u7AEF**%0A%60%60%60java%0A/*%0A%u5BA2%u6237%u7AEF%u5411%u670D%u52A1%u7AEF%u4E0A%u4F20%u56FE%u7247%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20PicClientDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09Socket%20s%20%3D%20new%20Socket%28InetAddress.getLocalHost%28%29%2C10007%29%3B%0A%09%09FileInputStream%20fis%20%3D%20new%20FileInputStream%28%22e%3A%5C%5C1.jpg%22%29%3B%0A%09%09OutputStream%20ops%20%3D%20s.getOutputStream%28%29%3B%0A%09%09int%20len%20%3D%200%3B%0A%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09while%20%28%28len%3Dfis.read%28buf%29%29%21%3D-1%29%0A%09%09%7B%0A%09%09%09ops.write%28buf%2C0%2Clen%29%3B%0A%09%09%7D%0A%09%09s.shutdownOutput%28%29%3B%0A%09%09s.close%28%29%3B%0A%09%09fis.close%28%29%3B%0A%09%7D%0A%09%0A%7D%0A%60%60%60%0A---%0A**2.%u670D%u52A1%u7AEF**%0A%60%60%60java%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20PicServerDemo%20%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09ServerSocket%20ss%20%3D%20new%20ServerSocket%2810007%29%3B%0A%09%09Socket%20s%20%3D%20ss.accept%28%29%3B%0A%09%09InputStream%20ips%20%3D%20s.getInputStream%28%29%3B%0A%09%09FileOutputStream%20fos%20%3D%20new%20FileOutputStream%28%22e%3A%5C%5C2.jpg%22%29%3B%0A%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09int%20len%20%3D%200%3B%0A%09%09while%20%28%28len%3Dips.read%28buf%29%29%21%3D-1%29%0A%09%09%7B%0A%09%09%09fos.write%28buf%2C0%2Clen%29%3B%0A%09%09%7D%0A%09%09fos.close%28%29%3B%0A%09%09s.close%28%29%3B%0A%09%09ss.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%0A%60%60%60%0A---%0A%23%23%236.%u4F7F%u7528%u591A%u7EBF%u7A0B%u5B9E%u73B0%u591A%u4E2A%u5BA2%u6237%u7AEF%u540C%u65F6%u5411%u670D%u52A1%u7AEF%u53D1%u9001%u6587%u4EF6%0A**1.%u5BA2%u6237%u7AEF**%0A%60%60%60java%0A/*%0A%u5F53%u591A%u4E2A%u5BA2%u670D%u7AEF%u540C%u65F6%u5411%u670D%u52A1%u7AEF%u53D1%u9001%u6587%u4EF6%u65F6%2C%u9700%u8981%u91C7%u7528%u591A%u7EBF%u7A0B%u624D%u884C%0A%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20UploadPicByThreadClient%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09if%20%28%21%28args.length%20%3D%3D%201%29%29%0A%09%09%7B%0A%09%09%09System.out.println%28%22%u8BF7%u9009%u62E9%u4E00%u4E2A%u56FE%u7247%u4E0A%u4F20%22%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09if%20%28%21%28args%5B0%5D.endsWith%28%22.jpg%22%29%29%29%0A%09%09%7B%0A%09%09%09System.out.println%28%22%u8BF7%u9009%u62E9%u4E00%u4E2A.jpg%u6587%u4EF6%22%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09File%20file%20%3D%20new%20File%28args%5B0%5D%29%3B%0A%09%09if%20%28%21%28file.exists%28%29%20%26%26%20file.isFile%28%29%29%29%0A%09%09%7B%0A%09%09%09System.out.println%28%22%u6587%u4EF6%u4E0D%u5B58%u5728%u6216%u8005%u4E0D%u662F%u6587%u4EF6%22%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%0A%09%09Socket%20s%20%3D%20new%20Socket%28%22192.168.0.114%22%2C10008%29%3B%0A%09%09FileInputStream%20fis%20%3D%20new%20FileInputStream%28file%29%3B%0A%09%09OutputStream%20ops%20%3D%20s.getOutputStream%28%29%3B%0A%09%09int%20len%20%3D%200%3B%0A%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09while%20%28%28len%3Dfis.read%28buf%29%29%21%3D-1%29%0A%09%09%7B%0A%09%09%09ops.write%28buf%2C0%2Clen%29%3B%0A%09%09%7D%0A%09%09s.shutdownOutput%28%29%3B%0A%09%09s.close%28%29%3B%0A%09%09fis.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A---%0A**2.%u670D%u52A1%u7AEF**%0A%60%60%60java%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20UploadPicByThreadServer%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09ServerSocket%20ss%20%3D%20new%20ServerSocket%2810008%29%3B%0A%09%09while%20%28true%29%0A%09%09%7B%0A%09%09%09Socket%20s%20%3D%20ss.accept%28%29%3B%0A%09%09%09new%20Thread%28new%20PicThread%28s%29%29.start%28%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0Aclass%20PicThread%20implements%20Runnable%0A%7B%0A%09Socket%20s%3B%0A%09PicThread%28Socket%20s%29%0A%09%7B%0A%09%09this.s%20%3D%20s%3B%0A%09%7D%0A%0A%09public%20void%20run%28%29%0A%09%7B%0A%09%09String%20ip%20%3D%20s.getInetAddress%28%29.getHostAddress%28%29%3B%0A%09%09System.out.println%28ip+%22%3A%3A%3Aconnect%22%29%3B%0A%09%09int%20num%20%3D%201%3B%0A%09%09try%0A%09%09%7B%0A%09%09%09InputStream%20ips%20%3D%20s.getInputStream%28%29%3B%0A%0A%09%09%09File%20file%20%3D%20new%20File%28%22e%3A%5C%5C%22+ip+%22%28%22+num+%22%29%22+%22.jpg%22%29%3B%0A%09%09%09while%20%28file.exists%28%29%29%0A%09%09%09%7B%0A%09%09%09%09file%20%3D%20new%20File%28%22e%3A%5C%5C%22+ip+%22%28%22+%28num++%29+%22%29%22+%22.jpg%22%29%3B%0A%09%09%09%7D%0A%09%09%09FileOutputStream%20fos%20%3D%20new%20FileOutputStream%28file%29%3B%0A%09%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09%09int%20len%20%3D%200%3B%0A%09%09%09while%20%28%28len%3Dips.read%28buf%29%29%21%3D-1%29%0A%09%09%09%7B%0A%09%09%09%09fos.write%28buf%2C0%2Clen%29%3B%0A%09%09%09%7D%0A%09%09%09fos.close%28%29%3B%0A%09%09%09s.close%28%29%3B%0A%09%09%09%0A%09%09%7D%0A%09%09catch%20%28Exception%20e%29%0A%09%09%7B%0A%09%09%09throw%20new%20RuntimeException%28%22%u4E0A%u4F20%u5931%u8D25%22%29%3B%0A%09%09%7D%0A%09%09%0A%09%7D%0A%7D%0A%0A%0A%60%60%60%0A%0A%23%23%237.%u5BA2%u6237%u7AEF%u5E76%u53D1%u767B%u5F55%u670D%u52A1%u5668%0A%0A%u5BA2%u6237%u7AEF%u901A%u8FC7%u952E%u76D8%u5F55%u5165%u7528%u6237%u540D%3B%0A%u670D%u52A1%u7AEF%u5BF9%u8FD9%u4E2A%u7528%u6237%u540D%u8FDB%u884C%u6821%u9A8C%3B%0A%u5982%u679C%u8BE5%u7528%u6237%u5B58%u5728%2C%u5728%u670D%u52A1%u7AEF%u663E%u793A%3A%20%22XXX%2C%u5DF2%u767B%u5F55%22%20%2C%20%u5E76%u5728%u5BA2%u6237%u7AEF%u663E%u793A%3A%20%22XXX%2C%u6B22%u8FCE%u5149%u4E34%22%0A%0A%u5982%u679C%u8BE5%u7528%u6237%u4E0D%u5B58%u5728%2C%u5728%u670D%u52A1%u7AEF%u663E%u793A%3A%20%22XXX%2C%u5C1D%u8BD5%u767B%u5F55%22%20%2C%20%u5E76%u5728%u5BA2%u6237%u7AEF%u663E%u793A%3A%22XXX%2C%u8BE5%u7528%u6237%u4E0D%u5B58%u5728%22%0A**1.%u5BA2%u6237%u7AEF**%0A%60%60%60java%0A/*%0A%u5BA2%u6237%u7AEF%u5E76%u53D1%u767B%u5F55%u670D%u52A1%u5668%0A%0A%u5BA2%u6237%u7AEF%u901A%u8FC7%u952E%u76D8%u5F55%u5165%u7528%u6237%u540D%3B%0A%u670D%u52A1%u7AEF%u5BF9%u8FD9%u4E2A%u7528%u6237%u540D%u8FDB%u884C%u6821%u9A8C%3B%0A%u5982%u679C%u8BE5%u7528%u6237%u5B58%u5728%2C%u5728%u670D%u52A1%u7AEF%u663E%u793A%3A%20%22XXX%2C%u5DF2%u767B%u5F55%22%20%2C%20%u5E76%u5728%u5BA2%u6237%u7AEF%u663E%u793A%3A%20%22XXX%2C%u6B22%u8FCE%u5149%u4E34%22%0A%0A%u5982%u679C%u8BE5%u7528%u6237%u4E0D%u5B58%u5728%2C%u5728%u670D%u52A1%u7AEF%u663E%u793A%3A%20%22XXX%2C%u5C1D%u8BD5%u767B%u5F55%22%20%2C%20%u5E76%u5728%u5BA2%u6237%u7AEF%u663E%u793A%3A%22XXX%2C%u8BE5%u7528%u6237%u4E0D%u5B58%u5728%22%0A%0A%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20%20UserLoginClient%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09Socket%20s%20%3D%20new%20Socket%28InetAddress.getLocalHost%28%29%2C10009%29%3B%0A%09%09//%u5B9A%u4E49%u8BFB%u53D6%u6D41%2C%u8BFB%u53D6%u952E%u76D8%u5F55%u5165%0A%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28System.in%29%29%3B%0A%09%09//socket%u8F93%u51FA%u6D41%2C%u53D1%u9001%u767B%u5F55%u7684%u7684name%0A%09%09PrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%3B%0A%09%09//socket%u8F93%u5165%u6D41%2C%u63A5%u6536%u670D%u52A1%u7AEF%u53D1%u9001%u7684%u4FE1%u606F%0A%09%09BufferedReader%20in%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%09%09%0A%09%09for%20%28int%20x%3D0%3Bx%3C3%3Bx++%20%29%0A%09%09%7B%0A%09%09%09//%u63A5%u6536%u952E%u76D8%u5F55%u5165%0A%09%09%09String%20name%20%3D%20bufr.readLine%28%29%3B%0A%09%09%09if%20%28name%20%3D%3D%20null%29%0A%09%09%09%7B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%09//%u53D1%u9001%u7ED9%u670D%u52A1%u7AEF%0A%09%09%09out.println%28name%29%3B%0A%09%09%09//%u63A5%u6536%u670D%u52A1%u7AEF%u4FE1%u606F%0A%09%09%09String%20info%20%3D%20in.readLine%28%29%3B%0A%09%09%09System.out.println%28info%29%3B%0A%09%09%09if%20%28info.equals%28name+%22%u6B22%u8FCE%u767B%u5F55%22%29%29%0A%09%09%09%7B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09s.close%28%29%3B%0A%09%09bufr.close%28%29%3B%0A%09%7D%0A%7D%0A%0A%60%60%60%0A---%0A**2.%u670D%u52A1%u7AEF**%0A%60%60%60java%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20UserLoginServer%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09ServerSocket%20ss%20%3D%20new%20ServerSocket%2810009%29%3B%0A%09%09while%20%28true%29%0A%09%09%7B%0A%09%09%09Socket%20s%20%3D%20ss.accept%28%29%3B%0A%09%09%09new%20Thread%28new%20UserThread%28s%29%29.start%28%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0Aclass%20UserThread%20implements%20Runnable%0A%7B%0A%09Socket%20s%3B%0A%09UserThread%28Socket%20s%29%0A%09%7B%0A%09%09this.s%20%3D%20s%3B%0A%09%7D%0A%09public%20void%20run%28%29%0A%09%7B%0A%09%09//%u83B7%u53D6%u5230%u767B%u5F55%u5BA2%u6237%u7AEF%u7684ip%0A%09%09String%20ip%20%3D%20s.getInetAddress%28%29.getHostAddress%28%29%3B%0A%09%09System.out.println%28ip+%22%3A%3A%3Aconnect%22%29%3B%0A%09%09try%0A%09%09%7B%0A%09%09%09//%u83B7%u53D6socket%u8F93%u5165%u6D41%2C%u8BFB%u53D6%u5BA2%u670D%u7AEF%u53D1%u9001%u8FC7%u6765%u7684%u4FE1%u606F%0A%09%09%09BufferedReader%20in%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%0A%09%09%09//%u5B9A%u4E8E%u8F93%u51FA%u6D41%2C%u5411%u5BA2%u6237%u7AEF%u53D1%u9001%u4FE1%u606F%0A%09%09%09PrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%3B%0A%09%09%09//%u5B9A%u4E49%u4E00%u4E2A%u6807%u8BB0%2C%u6765%u5224%u65AD%u5BA2%u6237%u7AEF%u53D1%u9001%u8FC7%u6765%u7684%u4FE1%u606F%u548C%u6570%u636E%u5E93%u4E2D%u7684%u4FE1%u606F%u662F%u5426%u76F8%u540C%09%09%09%0A%09%09%09boolean%20flag%20%3D%20false%3B%0A%09%09%09String%20name%20%3D%20null%3B//%u7528%u6765%u63A5%u6536%u5BA2%u6237%u7AEF%u53D1%u9001%u8FC7%u6765%u7684%u7528%u6237%u767B%u5F55%u4FE1%u606F%0A%09%09%09for%20%28int%20x%20%3D0%3Bx%3C3%20%3Bx++%20%29//%u5141%u8BB8%u7528%u6237%u8FDE%u7EED%u5C1D%u8BD5%u767B%u5F55%u4E09%u6B21%0A%09%09%09%7B%09%0A%09%09%09%09//%u7528%u4E8E%u8BFB%u53D6%u670D%u52A1%u5668%u4E2D%u5B58%u7684%u7528%u6237%u5217%u8868%0A%09%09%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20FileReader%28%22e%3A%5C%5C1.txt%22%29%29%3B%0A%09%09%09%09name%20%3D%20in.readLine%28%29%3B//%u8BFB%u53D6%u4E00%u6B21socket%u8F93%u5165%u6D41%u4E2D%u7684%u7528%u6237%u4FE1%u606F%0A%09%09%09%09String%20line%20%3D%20null%3B%0A%09%09%09%09while%20%28%28line%3Dbufr.readLine%28%29%29%21%3Dnull%29%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28name.equals%28line%29%29%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09flag%20%3D%20true%3B%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%09%09%09%09%0A%09%09%09%09if%20%28flag%20%3D%3D%20true%29%0A%09%09%09%09%7B%0A%09%09%09%09%09System.out.println%28ip+%22%u767B%u5F55%u6210%u529F%22%29%3B%0A%09%09%09%09%09out.println%28name+%22%u6B22%u8FCE%u767B%u5F55%22%29%3B%0A%09%09%09%09%09bufr.close%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%0A%09%09%09%09System.out.println%28ip+%22%u5C1D%u8BD5%u767B%u5F55%22%29%3B%0A%09%09%09%09out.println%28name+%22%u7528%u6237%u4E0D%u5B58%u5728%22%29%3B%0A%09%09%09%09bufr.close%28%29%3B%09%09%09%09%0A%09%09%09%7D%09%0A%09%09%09s.close%28%29%3B%09%09%0A%09%09%7D%0A%09%09catch%20%28Exception%20e%29%0A%09%09%7B%0A%09%09%09throw%20new%20RuntimeException%28%22%u4E0A%u4F20%u5931%u8D25%22%29%3B%0A%09%09%7D%09%09%0A%09%7D%0A%7D%0A%0A%0A%60%60%60%0A---%0A%23%23%238.%u81EA%u5B9A%u4E49%u6D4F%u89C8%u5668%u529F%u80FD%0A%0A%60%60%60java%0A/*%0A%u81EA%u5B9A%u4E49%u6D4F%u89C8%u5668%u529F%u80FD%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20%20MyIE%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09Socket%20s%20%3D%20new%20Socket%28InetAddress.getLocalHost%28%29%2C8080%29%3B%0A%09%09PrintWriter%20out%20%3D%20new%20PrintWriter%28s.getOutputStream%28%29%2Ctrue%29%3B%0A%0A%09%09//%u6A21%u62DF%u6D4F%u89C8%u5668%u5411%u670D%u52A1%u5668%u53D1%u9001%u7684%u8BF7%u6C42%u6D88%u606F%u5934%0A%09%09out.println%28%22GET%20/myweb/web.html%20HTTP/1.1%22%29%3B%0A%09%09out.println%28%22Accept%3A%20*/*%22%29%3B%0A%09%09out.println%28%22Accept-Language%3A%20zh-Hans-CN%2Czh-Hans%3Bq%3D0.5%22%29%3B%0A%09%09out.println%28%22Host%3A%20221.237.64.248%3A10010%22%29%3B%0A%09%09out.println%28%22Connection%3A%20closed%22%29%3B%0A%09%09out.println%28%29%3B%0A%09%09out.println%28%29%3B%0A%0A%09%09BufferedReader%20bufr%20%3D%20new%20BufferedReader%28new%20InputStreamReader%28s.getInputStream%28%29%29%29%3B%0A%09%09String%20line%20%3D%20null%3B%0A%09%09while%20%28%28line%3Dbufr.readLine%28%29%29%21%3Dnull%29%0A%09%09%7B%0A%09%09%09System.out.println%28line%29%3B%0A%09%09%7D%0A%09%09s.close%28%29%3B%0A%09%7D%0A%7D%0A//%u6D4F%u89C8%u5668%u5411TOMCAT%u670D%u52A1%u5668%u53D1%u9001%u7684%u8BF7%u6C42%u6D88%u606F%u5934%0A/*%0AGET%20/%20HTTP/1.1%0AAccept%3A%20text/html%2C%20application/xhtml+xml%2C%20image/jxr%0AAccept-Language%3A%20zh-Hans-CN%2Czh-Hans%3Bq%3D0.5%0AUser-Agent%3A%20Mozilla/5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20x64%29%20AppleWebKit/537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome/51.0.2%0A704.79%20Safari/537.36%20Edge/14.14393%0AAccept-Encoding%3A%20gzip%2C%20deflate%0AHost%3A%20221.237.64.248%3A10010%0AConnection%3A%20Keep-Alive%0A*/%0A%0A//TOMCAT%u670D%u52A1%u5668%u5411%u6D4F%u89C8%u5668%u8FD4%u56DE%u7684%u5E94%u7B54%u6D88%u606F%u5934%0A/*%0AHTTP/1.1%20200%20OK%0AServer%3A%20Apache-Coyote/1.1%0AAccept-Ranges%3A%20bytes%0AETag%3A%20W/%22191-1476517035954%22%0ALast-Modified%3A%20Sat%2C%2015%20Oct%202016%2007%3A37%3A15%20GMT%0AContent-Type%3A%20text/html%0AContent-Length%3A%20191%0ADate%3A%20Sat%2C%2015%20Oct%202016%2014%3A06%3A12%20GMT%0AConnection%3A%20close%0A%0A%0A*/%0A%0A%60%60%60%0A%0A---%0A%23%23%u4E94.URL%u548CURLConnection%0A%0A%23%23%231.%u5E94%u7528%0A%60%60%60java%0A/*%0AURL%0AURLConnection%0A*/%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0Aclass%20URLDemo%20%0A%7B%0A%09public%20static%20void%20main%28String%5B%5D%20args%29%20throws%20Exception%0A%09%7B%0A%09%09URL%20url%20%3D%20new%20URL%28%22http%3A//221.237.64.124%3A8080/myweb/web.html%22%29%3B%0A%09%09String%20protocol%20%3D%20url.getProtocol%28%29%3B//%u83B7%u53D6%u534F%u8BAE%20%u5F97%u5230http%0A%09%09String%20host%20%3D%20url.getHost%28%29%3B//%u83B7%u53D6%u4E3B%u673A%0A%09%09int%20port%20%3D%20url.getPort%28%29%3B//%u83B7%u53D6%u7AEF%u53E3%0A%09%09String%20path%20%3D%20url.getPath%28%29%3B//%u83B7%u53D6%u8DEF%u5F84%0A%09%09String%20file%20%3D%20url.getFile%28%29%3B//%u83B7%u53D6%u6587%u4EF6%u540D%0A%09%09String%20query%20%3D%20url.getQuery%28%29%3B//%u83B7%u53D6%u67E5%u8BE2%u90E8%u5206%0A%09%09%0A%09%09//URLConnection%u5C06%u6570%u636E%u5728%u5E94%u7528%u5C42%u5C01%u88C5%2C%u6240%u4EE5%u8FD4%u56DE%u7684%u6570%u636E%u53EA%u6709%u7F51%u9875%u91CC%u9762%u7684%u6570%u636E%2C%u5C31%u5982%u6D4F%u89C8%u5668%u8FD4%u56DE%u7684%u6570%u636E%u4E00%u6837%2C%u4E0D%u4F1A%u5C06%u670D%u52A1%u5668%u8FD4%u56DE%u7684%u5E94%u7B54%u6D88%u606F%u5934%u663E%u793A%u51FA%u6765%0A%09%09URLConnection%20conn%20%3D%20url.openConnection%28%29%3B//%u8FD4%u56DE%u4E00%u4E2A%20URLConnection%20%u5BF9%u8C61%uFF0C%u5B83%u8868%u793A%u5230%20URL%20%u6240%u5F15%u7528%u7684%u8FDC%u7A0B%u5BF9%u8C61%u7684%u8FDE%u63A5%u3002%0A%09%09System.out.println%28conn%29%3B//%u7ED3%u679C%u4E3A%3Asun.net.www.protocol.http.HttpURLConnection%3Ahttp%3A//221.237.64.124%3A8080/myweb/web.html%3Fname%3Dzhangsan%26color%3Dred%0A%09%09InputStream%20in%20%3D%20conn.getInputStream%28%29%3B//%u83B7%u53D6URLConnection%u91CC%u7684%u8BFB%u53D6%u6D41%0A%09%09byte%5B%5D%20buf%20%3D%20new%20byte%5B1024%5D%3B%0A%09%09int%20len%20%3D%20in.read%28buf%29%3B%0A%09%09System.out.println%28new%20String%28buf%2C0%2Clen%29%29%3B%0A%09%7D%0A%7D%0A%60%60%60%0A%0A%0A%23%23%232.%u57DF%u540D%u89E3%u6790%0A%u57DF%u540D%u89E3%u6790%3A%0A%u57DF%u540D%u89E3%u6790%u662F%u628A%u57DF%u540D%u6307%u5411%u7F51%u7AD9%u7A7A%u95F4IP%uFF0C%u8BA9%u4EBA%u4EEC%u901A%u8FC7%u6CE8%u518C%u7684%u57DF%u540D%u53EF%u4EE5%u65B9%u4FBF%u5730%u8BBF%u95EE%u5230%u7F51%u7AD9%u7684%u4E00%u79CD%u670D%u52A1%u3002IP%u5730%u5740%u662F%u7F51%u7EDC%u4E0A%u6807%u8BC6%u7AD9%u70B9%u7684%u6570%u5B57%u5730%u5740%uFF0C%u4E3A%u4E86%u65B9%u4FBF%u8BB0%u5FC6%uFF0C%u91C7%u7528%u57DF%u540D%u6765%u4EE3%u66FFIP%u5730%u5740%u6807%u8BC6%u7AD9%u70B9%u5730%u5740%u3002%u57DF%u540D%u89E3%u6790%u5C31%u662F%u57DF%u540D%u5230IP%u5730%u5740%u7684%u8F6C%u6362%u8FC7%u7A0B%u3002%u57DF%u540D%u7684%u89E3%u6790%u5DE5%u4F5C%u7531DNS%u670D%u52A1%u5668%u5B8C%u6210%0A%0A%u5F53%u6211%u4EEC%u5728%u8F93%u5165%u7F51%u5740%2C%u7CFB%u7EDF%u4F1A%u5148%u8BBF%u95EE%u672C%u5730%u7684hosts%u6587%u4EF6%2C%u4F4D%u7F6EC%3AWINDOWS%5Csystem32%5Cdriver%5Csetc%2C%u7136%u540E%u5728%u8BBF%u95EEDNS%u670D%u52A1%u5668%0A1.%u6BD4%u5982%u907F%u5F00%u76D7%u7248%u8F6F%u4EF6%u7684%u9A8C%u8BC1%u670D%u52A1%u5668%2C%u5728%u672C%u5730%u7684host%u6587%u4EF6%u5C06%u7F51%u5740%u6539%u4E3A%u672C%u5730host%2C127.0.0.1%2C%u8FD9%u6837%u5C31%u4F1A%u9A8C%u8BC1%u5931%u8D25%0A2.%u53EF%u4EE5%u907F%u5F00%u4E00%u4E9B%u5783%u573E%u7F51%u7AD9%2C%u5728%u672C%u5730host%u4E2D%u5C06%u7F51%u5740%u7684%u6620%u5C04%u6539%u6210127.0.0.1%0A%0A%0A
相關文章
相關標籤/搜索