(1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识
目前主流的网络通讯软件有:微信、QQ、YY、陌陌、探探、飞信、阿里旺旺、...
在吗?
1.1 七层网络模型(熟悉)
为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将数据的传递从逻辑上划分为以下七层:
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
在发送数据之前要按照上述七层协议从上到下一层一层进行加包处理,再发送出去;
在接收数据之后要按照上述七层协议从下到上一层一层进行拆包处理,再解析出来;
1.2 常用的协议(熟悉)
http协议 - 超文本传输协议,主要用于浏览网页时使用。
ftp协议 - 文件传输协议,主要用于上传和下载文件时使用。
tcp协议 - 传输控制协议,主要用于网络通信时使用。
udp协议 - 用户数据报协议,主要用于网络通信时使用。
ip协议 - 互联网协议,是上述协议的底层协议。
协议本质上就是一种约定,用于规范通信双方的方式和规则。
1.3 IP地址(重点)
如:
192.168.1.1 - 是绝大多数路由器的登录地址,进行Mac地址的过滤。
IP地址本质上就是互联网中的唯一地址标识,通常由32位二进制组成的整数进行描述,叫做IPv4,当然也有128位二进制组成的整数,叫做IPv6。
日常生活中采用点分十进制表示法来进行IP地址的描述,也就是将每个字节的二进制转换为十进制整数,不同整数之间采用小数点隔开。
如:
0x01020304 => 1.2.3.4
查询IP地址的方式:
Windows系统:在dos窗口中使用ipconfig命令或ipconfig/all命令查看即可.
Linux系统: 在终端窗口中使用ifconfig命令或/sbin/ifconfig命令查看即可.
1.4 端口号
IP地址 - 使用IP地址可以定位到具体某台设备。
端口号 - 可以定位到具体设备中的具体进程。
网络编程需要提供:IP地址 和 端口号。
端口号本质就是由16二进制组成的整数,范围是:0 ~ 65535,其中0 ~ 1024之间的端口号通常被系统占用,因此编程从1025开始使用。
2.基于tcp协议的编程模型(重中之重)
2.1 编程模型
服务器:
(1)创建ServerSocket类型的对象,并提供端口号;
(2)等待客户端的连接请求,调用accept()方法;
(3)使用输入输出流进行通信;
(4)关闭Socket并释放有关的资源;
客户端:
(1)创建Socket类型的对象,并提供服务器的IP地址和端口号;
(2)使用输入输出流进行通信;
(3)关闭Socket并释放有关的资源;
2.2 相关类和方法的解析
(1)ServerSocket类
java.net.ServerSocket类主要用于描述服务器端的套接字(大插排)。
ServerSocket(int port) - 根据参数指定的端口号来构造对象。
Socket accept() - 用于侦听并等待客户端的连接请求。
void close()
(2)Socket类
java.net.Socket类是用于描述客户端的套接字,是两台机器间通信的端点(小插排)。
Socket(String host, int port) - 根据参数指定的主机名和端口号来构造对象。
InputStream getInputStream() - 用于获取当前套接字的输入流。
OutputStream getOutputStream() - 用于获取当前套接字的输出流。
void close()
3.tcp协议和udp协议的比较(笔试题)
3.1 tcp协议
- 传输控制协议,是一种面向连接的协议,类似于打电话。
- 建立连接 => 进行通信 => 断开连接
- 在通信的整个过程中全程保持连接
- 该协议保证了数据传输的可靠性和有序性
- 该协议是一种全双工的字节流通信方式
- 服务器压力比较大,资源消耗比较多,发送数据的效率相对比较低
3.2 udp协议
- 用户数据报协议,是一种非面向连接的协议,类似于写信。
- 在通信的整个过程中不需要保持连接
- 该协议不保证数据传输的可靠性和有序性
- 该协议是一种全双工的数据报通信方式
- 服务器压力比较小,资源消耗比较少,发送数据的效率相对比较高
(1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型的更多相关文章
- (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型
1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...
- python语法基础-网络编程-TCP协议和UDP协议
############### 网络编程 ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- SHELL脚本编程的常识和VI常用技巧
来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc3751808 ...
- 关于网络协议和socket编程基本概念
TCP协议可以说已经是IT人耳熟能详的协议,最近在学习socket网络编程时后重新温习一下这个协议,针对一些问题做了一些总结,很多理解可能还不是很准确. 1. 协议是什么?所谓的各种网络协议无非是一种 ...
- 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...
- 开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等
开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等 C++开发网络通信程序时用asio是个不错的选择 ...
- 基于.NET环境,C#语言 实现 TCP NAT
基于.NET平台和C#语言实现TCP NAT穿越 1.<C# WinForm 跨线程访问控件(实用简洁写法)> 2.<基于.NET环境,C#语言 实现 TC ...
- Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)
网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...
随机推荐
- redis实战笔记(3)-第3章 Redis命令
第3章 Redis命令 本章主要内容 字符串命令. 列表命令和集合命令 散列命令和有序集合命令 发布命令与订阅命令 其他命令 在每个不同的数据类型的章节里, 展示的都是该数据类型所独有的. 最 ...
- docker-compose.yml样例(mysql主从+mycat读写分离)
Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ...
- UIKit 框架之UITextView
// // ViewController.m // UItextView // // Created by City--Online on 15/5/22. // Copyright (c) 2015 ...
- XP系统运行wpf程序出现透明现象的解决
xp 虚拟机运行WPF程序的时候,有部分控件透明,在这儿有一个可能的解决方案: 关闭系统的硬件加速: 1. 按“WIN” + R 键,在“运行”输入框中输入“dxdiag”: 2. 在“DirectX ...
- Vertica备份恢复
Vertica备份和恢复数据库 Vertica提供了一个功能全面的使用程序--vbr, 他是一个Python脚本.使用vbr脚本可以备份和还原完整备份以及为特定架构或表创建备份.vbr实用程序会在首次 ...
- [javaSE] 位运算符(&|^)
位运算是直接对二进制进行计算 左移 << 右移 >> 先把整数换成四个8bit 0000-0000 0000-0000 0000-0000 0000-0000 这个二进制左右移 ...
- Xcode DEBUG宏定义,debug和release模式的选择
设置DEBUG, 使用宏定义: #if DEBUG NSLog(@"debug model"); #else //执行release模式的代码 #endif
- 【转】Java高并发,如何解决,什么方式解决
原文地址:https://www.cnblogs.com/lr393993507/p/5909804.html 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了. ...
- 《码出高效 Java开发手册》第七章 并发与多线程
码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/concurrency/multithreading ...
- 哈夫曼编码(Huffman coding)的那些事,(编码技术介绍和程序实现)
前言 哈夫曼编码(Huffman coding)是一种可变长的前缀码.哈夫曼编码使用的算法是David A. Huffman还是在MIT的学生时提出的,并且在1952年发表了名为<A Metho ...