`
bingzhen66
  • 浏览: 37035 次
文章分类
社区版块
存档分类
最新评论

56.黑马程序员-网络编程

 
阅读更多

------- android培训java培训、期待与您交流! ----------

一、网络模型
  • OSI参考模型
  • TCP/IP参考模型
二、网络通信要素
  • IP地址
    • 网络中设备的标识
    • 不易记忆,可用主机名,如www.baidu.com。
    • 本地回环地址127.0.0.1 ,主机名:Localhost。
  • 端口号
  • 传输协议
  1. 找到对方IP
  2. 数据要发送到对方指定的引用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,称为端口(逻辑端口)。一个网络应用程序会对应一个或多个数字标识。
  3. 定义通信规则,称为协议。国际组织定义了通用规则TCP/IP。本地回环地址127.0.0.1,作用是测试网卡。常见端口web:80、Tomcat:8080、MySQL:3306,可以更改端口。
三、通信方式
  1. OSI模型有七个层、TCP/IP模型有四个层。
  2. 本地机器传输的是数据封包。我们面对机器是应用层,应用层加上标识封装,一层层向下封装。网络层加上IP地址,数据链路层是加上传输方式(底层传输协议),最后一层物理层(如网线、无线),物理层传输到目的地。
  3. 目的机器接到数据封包以后,每一层都读本层特有数据,经过层层拆包最后到达应用层。应用层把数据给指定端口。
  4. TCP/IP模型简化了OSI模型。我们面对的是传输层、网际层。JavaWeb开发在应用层。
四、InetAddress类
  1. 方法getLocalHost():获取本地主机IP/主机名。
  2. 方法getHostAddress():获取本地地址,以IP为主
  3. 方法getHostName():获取本地主机名。
  4. 方法getByName():获取网络主机名。如果不存在主机名还是IP地址。
五、TCP和UDP(必须掌握)
  • UDP
    • 将数据、源、目的封装成数据包,不需要建立连接。
    • 面向无连接,不论对方是否收的到,只管发数据,每个包最大64K.
    • 因为无连接,所以速度快、协议不可靠。
    • 视频会议、聊天工具、桌面共享
  • TCP
    • 建立连接、形成传输数据的通道。
    • 在连接中进行大数据量传输。
    • 通过三次握手连接,安全的协议。
      • 三次握手:A发连接请求给B,B再发给A,A最后再发给B确定。
    • 必须建立连接,效率会稍低。
六、Socket
  • 可以把Socket看错码头,有了码头才能装货 (数据包)卸货。
    • Socket是为网络服务提供的一种机制。
    • 通信的两端都有Socket。数据在两个Socket间通过IO传输。
    • 两个应用程序通过网络通信,可以把两个应用程序称为Socket。
  • UDP
    • UDP分为发送端和接受端
    • 类DatagramSocket:发送、接受数据报包的套接字。
      • 方法void receive(DatagramPacket p):从此套接字接受数据报包。
      • 方法void send(DatagramPacket p):从此套接字发送数据报包。
    • 类 DatagramPacket:此类表示数据报包。
      • 数据报包用来实现无连接包投递服务。包中定义了发送信息和目的信息。
    • import java.net.*;
      import java.io.*;
      class  TextClient
      {
      	public static void main(String[] args) throws Exception
      	{
      		Socket s = new Socket("169.254.189.143",10006);
      
      		BufferedReader bufr =
      			new BufferedReader (new FileReader("IPDemo.java"));
      
      		PrintWriter out = new PrintWriter (s.getOutputStream(),true);
      
      		String line = null;
      		while ((line=bufr.readLine())!=null)
      		{
      			out.println(line);
      		}
      
      		s.shutdownOutput();//关闭客户端的输出流,相当于给流中加入一个结束标记。
      //		out.println("over");
      		BufferedReader bufIn =
      			new BufferedReader (new InputStreamReader(s.getInputStream()));
      		String str = bufIn.readLine();
      		System.out.println(str);
      
      		bufr.close();
      		s.close();
      	}
      }
      
      class  TextServer
      {
      	public static void main(String[] args) throws Exception
      	{
      		ServerSocket ss = new ServerSocket(10006);
      
      		Socket s = ss.accept();
      		String ip = s.getInetAddress().getHostAddress();
      		System.out.println(ip+".....conneted!");
      
      		//源:socket输入流
      		BufferedReader bufIn = 
      			new BufferedReader (new InputStreamReader(s.getInputStream()));
      
      		//目的:文件
      		PrintWriter out =
      			new PrintWriter(new FileWriter("server.txt"),true);
      
      		String line = null;
      		while ((line = bufIn.readLine())!=null)
      		{
      //			if ("over".equals(line))
      //				break;
      			out.println(line);
      
      		}
      
      		PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
      		pw.println("上传成功");
      
      		out.close();
      		s.close();
      		ss.close();
      	}
      }
      
      /*
      
      */

  • TCP
    • TCP分为客户端和服务端。分别对应Socket、ServerSocket。
    • TCP客户端的socket一旦建立成功,通路建立,产生了socket流。这个流可以读写,既有输入流getInputStream()也有输出流getOutputStream()。
    • 服务端没有流对象,客户端有。服务端使用accept()方法获取到客户端socket对象后与客户端通信。使用客户端对象的读取流来读取数据。注意:数据源是网络流。
    • import java.net.*;
      import java.io.*;
      /*
      演示tcp的传输的客户端和服务端的互访。
      需求:客户端给服务端发送数据,服务端收到后,给客户的反馈信息。
      */
      /*
      客户端:
      1,建立socket服务。指定要连接主机和端口。
      2,获取socket流中的输出流。将数据写到该流中。通过网络发送到服务端。
      3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
      4,关闭客户端资源。
      */
      class  TcpClient2
      {
      	public static void main(String[] args) throws Exception
      	{
      		Socket s = new Socket ("169.254.189.143",10004);
      
      		OutputStream out = s.getOutputStream();
      		out.write("服务端,你好".getBytes());
      
      		InputStream in = s.getInputStream();
      		byte[] buf = new byte[1024];
      		int len = in.read(buf);
      
      		System.out.println(new String(buf,0,len));
      		s.close();
      	}
      }
      class  TcpServer2
      {
      	public static void main(String[] args) throws Exception
      	{
      		ServerSocket ss = new ServerSocket(10004);
      		Socket s = ss.accept();
      		
      		String ip = s.getInetAddress().getHostAddress();
      		InputStream in = s.getInputStream();
      		byte[] buf = new byte[1024];
      		int len = in.read(buf);
      
      		System.out.println(ip+".....connected!");
      		System.out.println(new String(buf,0,len));
      		OutputStream out = s.getOutputStream();
      		out.write("哥们收到,你也好".getBytes());
      
      		s.close();
      		ss.close();
      
      
      	}
      }
      










分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics