Java_网络通信

网络编程概述

计算机网络

指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.

网络编程

就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换.

网络模型

OSI参考模型

开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内连为网络的标准框架,简称OSI.

网络模型七层概述
Java_网络通信_第1张图片
1.PNG
Java_网络通信_第2张图片
2.PNG
Java_网络通信_第3张图片
3.PNG
TCP/IP参考模型

TCP/IP(又称TCP/IP协议簇)是一组用于实现网络互连的通信协议,其名称来源该协议簇中两个重要的协议(IP协议和TCP协议)

Java_网络通信_第4张图片
图片.png

该模型的流层图为上图左边是七层但这是在理论基础上,在实际运行中是右图四层

两种模型协议对照表
Java_网络通信_第5张图片
图片.png

网络通信要素

IP地址
  * 网络上主机设备的唯一标识.
  *  IP地址 = 网络号码+主机地址.
  * host的标识
      -ipv4:32位地址,以点分十进制表示  例如:192.168.0.1.
      -ipv6:128位地址,以:分隔8个16进制数  例如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
 -本地回环地址
      -127.0.0.1,主机名localhost.
 -缺点:
     -  不容易记忆
          - IP地址对应一个名字,叫域名.
          - 域名系统叫DNS,IP和域名之间映射的数据库
     -  ip告罄
         - ipv6解决这个问题.
端口号(定位程序)
  • 用于标示进程的逻辑地址,不用进程的标识.
  • 每个Host与网络数据交流的出口.
  • 用于标记进程的逻辑地址,不同进程的标识.
  • 有效端口:0~65535 系统保留端口:0~1024
传输协议(用什么样的方法进行交互)
- 通讯的规则.
- 网络通讯的规则
   - 寻址
   - 建立连接
   - 释放连接
   - 流量控制和缓冲区管理
   - 多路复用
   - 崩溃恢复
  • 常见传输协议
    • TCP
    • UDP
    • FTP
数据包
  • 单个消息被划分为多个数据块,这些数据块成为包,它包括发送者和接收者的地址信息.

常见网络协议

TCP协议

  • TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的基于字节流的传输层通信协议.
    TCP协议的流程:
  • 建立连接,形成数据传输的通道.
  • 在连接中进行大数据传输
  • 通过三次握手完成连接,是可靠协议,安全送达.
  • 必须建立连接,效率会稍低.

![图片.png](http://upload-images.jianshu.io/upload_images/3722442-
ce8c6562bd908abf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

UDP协议

  • UDP(User Datagram Protocol )一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务

UDP协议的流程图

  • 将数据及源和目的封装到数据包中
  • 每个数据包的大小限制在64K内
  • 因无连接,是不可靠协议
  • 不需要建立连接,速度快
TCP/UDP的区别
Java_网络通信_第6张图片
4.PNG

HTTP协议

  • HTTP是基于TCP/IP协议的应用层超文本传输协议,是同于从www服务器传输超文本到本地浏览器的传输协议,由于其简捷 快速的方式,使用于分布式超媒体信息系统.
    HTTP协议流程图
  • 不涉及数据包哦(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口.
  • HTTP采用了请求/相应模式.
  • 请求有三部分组成:请求头 请求行 请求体.
  • 响应三个部分组成: 响应头 响应行 响应体.

http://www.cnblogs.com/roverliang/p/5176456.html
http://www.cnblogs.com/ranyonsue/p/5984001.html
想要了解更多的关于HTTP协议的内容看看上面的博客 个人觉得写得挺好.
File协议: http://blog.csdn.net/woxueliuyun/article/details/4165610
Ras协议http://blog.csdn.net/laughing2333/article/details/52292481
cookie和sessionhttp://blog.csdn.net/u012385190/article/details/51957749
想要了解上述内容可以看看这些博客.

Socket

概述

  • Socket中文简称"套接字",是一种双向网络通信方式,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信.

原理机制

  • 通信的两端都有Socket.
  • 网络通信其实就是Socket间的通信.
  • 数据在两个Socket间通过IO流传输.
    下图是java中Socket编程


    Java_网络通信_第7张图片
    5.PNG

服务端

package inter;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class Server {
    public static void main(String[] args)throws Exception {
        //创建服务器ServerSocket
        ServerSocket server = new ServerSocket(8080);
        //接受到客户端Socket
        System.out.println("服务器等待接受中.....");
        Socket socket = server.accept();
        System.out.println("服务器接受到客户端请求...");
        
        
         //接受客户端发送消息
         InputStream in = socket.getInputStream();
         byte[] by = new byte[1024];
         int length = in.read(by);
         String content = new String(by, 0,length);
         System.out.println("客户端发送内容:"+content);
         
         
        //给客户端回复
         OutputStream stream = socket.getOutputStream();
         stream.write("没吃呢".getBytes());
        
    }
}

客户端

package inter;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

import javax.xml.ws.handler.MessageContext.Scope;

//客户端
public class Client {
   public static void main(String[] args) throws Exception{
     Socket socket = new Socket("localhost", 8080);
     //获取socket发送数据的流
     OutputStream stream = socket.getOutputStream();
     stream.write("你吃饭了吗".getBytes());
     
     
     //获取服务器返回的数据
     InputStream in = socket.getInputStream();
     byte[] by = new byte[1024];
     int length = in.read(by);
     String content = new String(by, 0,length);
     System.out.println("服务器返回内容:"+content);
     
     
}
}

上面的代码是最简单的Socket编程,要理解其中的原理.
在网络通信中有很多理论,我们一定要搞明白他们之间的区别与联系,作为计算机人士这些问题都不懂就打脸了.

你可能感兴趣的:(Java_网络通信)