zoukankan      html  css  js  c++  java
  • 网络编程


    一,概述:
    1,OSI和Tcp结合的五层协议协议:

    2,各层协议简单介绍:
    OSI參考模型:
    1.层物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。 
    2.数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。 
    3.层网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器。常把这一层的数据叫做数据包。 
    4.层传输层:定义了一些数据传输的协议和port号(WWWport80等),如:TCP(传输控制协议,传输效率低。可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议。与TCP特性恰恰相反。用于传输可靠性要求不高。数据量小的数据。如QQ聊天数据就是通过这样的方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。经常把这一层数据叫做段。

     
    5.会话层:通过传输层(port号:传输port与接收port)建立传输数据的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间须要互相认识能够是IP也能够是MAC或者是主机名) 
    6.表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机可以识别的东西转换成人可以能识别的东西(如图片、声音等)。

     
    7.应用层: 主要是一些终端的应用,比方说FTP(各种文件下载),WEB(IE浏览),QQ之类的(能够把它理解成我们在电脑屏幕上能够看到的东西.就是终端应用)。


    3,网络通讯要素
    IP地址:InetAddress
    网络中设备的标识 192.168.1.223  
    不易记忆,可用主机名
    本地回环地址:127.0.0.1  主机名:localhost
    port号:
    用于标识进程的逻辑地址,不同进程的标识
    有效port:0~65535,当中0~1024系统使用或保留port。


    port:物理port。


    软件应用程序的数字标识:逻辑port。
    传输协议:
    通讯的规则
    常见协议:TCP(传输控制协议)。UDP(数据报文报协议)


    二,UDP传输和TCP传输:

    1,UDP传输步骤:
    DatagramSocket与DatagramPacket
    建立发送端,接收端。
    建立数据包。
    调用Socket的发送接收方法。
    关闭Socket。

    发送端与接收端是两个独立的执行程序。

    发送端:在发送端,要在数据包对象中明白目的地IP及port。
    DatagramSocket ds = new DatagramSocket();
    byte[] by = “hello,udp”.getBytes();
    DatagramPacket dp = new DatagramPacket(by,0,by.length,
    			InetAddress.getByName(“127.0.0.1”),10000);
    ds.send(dp);
    ds.close();

    接收端:在接收端,要指定监听的port。

    DatagramSocket ds = new DatagramSocket(10000);
    byte[] by = new byte[1024];
    DatagramPacket dp = new DatagramPacket(by,by.length);
    ds.receive(dp);
    String str = new String(dp.getData(),0,dp.getLength());
    System.out.println(str+"--"+dp.getAddress());
    ds.close();

    2,TCP传输步骤:
    Socket和ServerSocket
    建立client和server端
    建立连接后。通过Socket中的IO流进行数据的传输
    关闭socket
    相同。client与server端是两个独立的应用程序。


    client:client须要明白server的ip地址以及port。这样才干够去试着建立连接。假设连接失败,会出现异常。

    连接成功。说明client与服务端建立了通道,那么通过IO流就能够进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取就可以。与服务端通讯结束后,关闭Socket。




    通过Socket建立对象并指定要连接的服务端主机以及port。


    Socket s = new Socket(“192.168.1.1”,9999);
    OutputStream out = s.getOutputStream();
    out.write(“hello”.getBytes());
    s.close();

    服务端:
    服务端须要明白它要处理的数据是从哪个port进入的。

    当有client訪问时。要明白是哪个client。可通过accept()获取已连接的client对象,并通过该对象与client通过IO流进行传输数据。

    当该client訪问结束,关闭该client。建立服务端须要监听一个port

    ServerSocket ss = new ServerSocket(9999);
    Socket s = ss.accept ();
    InputStream in = s.getInputStream();
    byte[] buf = new byte[1024];
    int num = in.read(buf);
    String str = new String(buf,0,num);
    System.out.println(s.getInetAddress().toString()+”:”+str);
    s.close();
    ss.close();

    UDP和TCP差别:
    UDP:1.将数据及源和目的封装成数据包中,不须要建立连接。---------面向无连接。
              2.每一个数据报包的大小在限制在64k内。


              3.因无连接。是不可靠的协议。
              4.不须要建立连接,速度快。
    无论连上连不上它都发送数据,所以数据也就有可能收不到。不可靠。主要用于视频会议聊天什么的。一些缺少点数据无关紧要,可靠性要求低,传输经济的应用。
    TCP:1.建立连接,形成数据传输的通道。
             2.在连接中进行大传输数据。
             3.通过三次握手完毕连接。是可靠协议。
             4.由于必须建立连接。所以效率会稍低。
    主要用于数据下载。文件传输。可靠性要求高的应用



    package server;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
    
    public static void main(String[] args) throws IOException {
    		/*
    		 *  自己定义server 服务端
    		 *  获取浏览器的信息。并反馈信息。
    		 */
    		System.out.println("my server run....");
    		ServerSocket ss = new ServerSocket(9090);
    		
    		Socket s = ss.accept();
    		System.out.println(s.getInetAddress().getHostAddress()+"....connected");
    		
    		//读取client的数据。
    		InputStream in = s.getInputStream();
    		byte[] buf = new byte[1024];
    		int len = in.read(buf);
    		String text = new String(buf,0,len-1);
    		System.out.println(text);
    		
    		//给client回馈数据。
    		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    		out.println("<font color='red' size='7'>欢迎光临</font>");
    		
    		s.close();
    		ss.close();
    	}
    }
    
    









  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5261520.html
Copyright © 2011-2022 走看看