网络编程

Edit

 

网络编程

一.网络编程基础

网络编程的目的:直接或间接地通过网络协议与其他计算机进行通讯。

网络编程中有两个主要的问题:
1.如何准确地定位网络上一台或多台主机。
2.找到主机后如何可靠高效地进行数据传输。

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

 

posted @ 2017-07-05 14:48  RuntimExcep  阅读(360)  评论(0编辑  收藏  举报