网络编程

网络编程基础

浪尽此生 提交于 2020-02-02 21:05:23
今日内容:    软件开发架构    远程通信OSI协议 软件开发架构:    c/s架构:       c:客户端 client       s:服务端 server   b/s架构: 本质也是c/s架构       b:浏览器 browser       s:服务器 server 服务端:24小时不间断提供服务 客户端:什么时候想体验服务,就去找心仪的服务端寻求服务 远程通信OSI协议:   实现远程通信,早期的电话需要 — 电话线          大屁股电脑需要 — 网线          笔记本电脑需要 — 网卡          无线电话需要 —— 网卡   所以实现远程通信第一个需要具备的条件是: 物理连接介质    此外,计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要有一套公共的标准/协议       OSI协议 :分为两种:        OSI七层协议:              应用层             表示层             会话层              传输层             网络层             数据链路层             物理连接层        OSI五层协议:              应用层             传输层             网络层            

java网络编程基本知识

放肆的年华 提交于 2020-02-02 20:53:18
1.基本概念 网络:一组相互连接的计算机,多台计算机组成,使用物理线路进行连接 网络连接的功能:交换数据、共享资源 网络编程3要素:   IP 地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备有素   端口号:计算机中应用的标号(代表一个应用程序),0-1024 系统使用或保留端口 ,端号口占 2 个字节,所以有效端口 0-65535   通信协议:通信的规则 TCP,UDP IP地址:网络ID+主机ID 共 32 位,4 个 8位二进制数组成   网络 ID:标识计算机或网络设备所有的网段   主机 ID:标识特定的主机或网络设备         特殊 IP 地址:   1) 127.0.0.1:本机回环地址,用于本机测试   2) 255.255.255.255:当前子网,一般用于当前子网广播信息 端口号 相当于现实中的门牌号 虚拟的概念,使用 0-65535 之间的整数,用于标识不同的应用程序,每个网络程序都会至少有一个端口号 Socket Socket 称为“套接字”,是计算机之间通信的一种约定或一种方式,通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 每一个客户端都使用一个 Socket 对象表示,服务器端使用 ServerSocket 等待客户端的连接 生活案例: 如果你想写封邮件发给远方的朋友,如何写信

UNIX网络编程——getsockname和getpeername函数

丶灬走出姿态 提交于 2020-02-02 20:40:12
这两个函数或者返回与某个套接字关联的 本地协议地址 (getsockname),或者返回与某个套接字关联的 外地协议地址 即得到 对方的地址 (getpeername)。 #include <sys/socket.h> int getsockname(int sockfd,struct sockaddr* localaddr,socklen_t *addrlen); int getpeername(int sockfd,struct sockaddr* peeraddr,socklen_t *addrlen); 均返回:若成功则为0,失败则为-1 getpeername只有在连接建立以后才调用 ,否则不能正确获得对方地址和端口,所以它的参数描述字一般是 已连接描述字而非监听套接口描述字。 没有连接的UDP不能调用getpeername,但是可以调用getsockname和TCP一样,它的地址和端口不是在调用socket就指定了,而是在第一次调用sendto函数以后。 已经连接的UDP,在调用connect以后,这2个函数(getsockname,getpeername)都是可以用的。但是这时意义不大,因为已经连接(connect)的UDP已经知道对方的地址。 需要这两个函数的理由如下: 在一个没有调用bind的 TCP客户 上, connect成功返回后

linux网络编程中阻塞和非阻塞socket的区别

流过昼夜 提交于 2020-02-02 03:57:54
原文: http://blog.sina.com.cn/s/blog_4b029ef30100nxcb.html 阻塞socket和非阻塞socket 读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲 区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。 对于非阻塞socket而言,socket的接收缓冲区中有没有数据,read调用都会立刻返回。接收缓冲区中有 数据时,与阻塞socket有数据的情况是一样的,如果接收缓冲区中没有数据,则返回错误号为 EWOULDBLOCK, 表示该操作本来应该阻塞的,但是由于本socket为非阻塞的socket,因此立刻返回,遇到这样的情况,可 以在下次接着去尝试读取。如果返回值是其它负值,则表明读取错误。 因此,非阻塞的rea调用一般这样写: if ((nread = read(sock_fd, buffer, len)) < 0) { if (errno == EWOULDBLOCK) { return 0; //表示没有读到数据 }else return -1; //表示读取失败 }else return nread;读到数据长度 写操作

网络编程简介

戏子无情 提交于 2020-01-31 14:00:25
网络编程 一:什么是进程 进程是指正在处理的的一个过程,进程实在是对正在运行程序一个抽象。 一个程序的运行是操作系用发送指令给CPU,CPU调用命令将程序从硬盘中加载到内存,这整个过程都是操作系用在控制。 操作系用的作用: 隐藏复杂的硬件接口,体统简单的抽象接口(将复杂指令简单化) 管理调度进程,并将多个进程对硬件的竞争变得有序。 串行:一个程序完完整整的执行下来,执行完后再去执行下一个。 并发:看起来想像是同时运行的 并行:真正做到了同时运行 多道技术 1、产生背景: 针对单核,实现并发 2、空间复用: 如同内存中同时又多道程序 时间上的复用: 复用一个cpu的时间片 强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样 才能保证下次切换回来时,能基于上次切走的位置继续运行 现代计算机: 现在的主机一般是多核,那么每个核都会利用多道技术, 有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定。 二:将应用程序对硬件资源的竞态请求变得有序化 串行: 一个完完整整的执行完了再执行下一个. 并发: 看起来是同时运行的 并行: 真正做到了同时运行 多道技术(了解): 空间复用: 共用一个内存条,每一个进程都有自己独立的内存空间,互不干扰,物理级别的隔离. 时间复用:

iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全

你。 提交于 2020-01-31 01:12:57
一、网络基础 1、基本概念 > 为什么要学习网络编程 在移动互联网时代,移动应用的特征有 几乎所有应用都需要用到网络,比如QQ、微博、网易新闻、优酷、百度地图 只有通过网络跟外界进行数据交互、数据更新,应用才能保持新鲜、活力 如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻、新浪新闻、搜狐新闻、腾讯新闻 视频:优酷、百度视频、搜狐视频、爱奇艺视频 音乐:QQ音乐、百度音乐、酷狗音乐、酷我音乐 LBS:百度地图、高德地图、大众点评、墨迹天气、滴滴打车 电商:淘宝、京东商城、天猫、蘑菇街、凡客诚品、美丽说 社交:QQ、微信、微博、陌陌、比邻 为什么要学习网络编程 网络编程是一种实时更新应用数据的常用手段 网络编程是开发优秀网络应用的前提和基础 > 基本概念 在网络编程中,有几个必须掌握的基本概念 客户端(Client):移动应用(iOS、android等应用) 服务器(Server):为客户端提供服务、提供数据、提供资源的机器 请求(Request):客户端向服务器索取数据的一种行为 响应(Response):服务器对客户端的请求做出的反应,一般指返回数据给客户端 作为移动开发工程师,主要的精力都是放在客户端开发 2、服务器 按照软件开发阶段来分,服务器可以大致分为2种

JAVA单排日记-2020/1/30-网络编程_TCP通信

断了今生、忘了曾经 提交于 2020-01-30 13:45:40
1.概述 TCP通信能实现两台计算机之间的数据( 字节流 )交互,通信的两端,要严格区分为 客户端(Client)与服务端(Server) 两端通信时步骤: 服务端程序,需要事先启动,等待客户端的连接。 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。 2.TCP通信的代码实现 2.1客户端 Socket 类 Socket 类:该类实现客户端套接字。套接字指的是两台设备之间通讯的端点,是包含了IP和端口号的网络单位。 构造方法 Socket s1 = new Socket ( String 服务器IP , int 服务器端口号 ) ; 成员方法 服务器与客户端不能创建自己的流对象交互,必须使用以下 Socket 类中提供的成员方法 OutputStream out = s1 . getOutputStream ( ) ; 获取字节输出流 InputStream in = s1 . getInputStream ( ) ; 获取字节输入流 s1 . close ( ) ; 关闭套接字 使用步骤 1.创建 Socket 类对象,构造方法中填入服务器的IP与端口号 2.使用 Socket 对象的 getOutputStream() 方法,获取网络字节输出流 OutputStream 对象 3.使用 OutputStream 对象的 write() 方法

JAVA单排日记-2020/1/29-网络编程_先验知识

巧了我就是萌 提交于 2020-01-30 08:46:47
1.软件结构 C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 网络编程:就是在一定的协议下,实现两台计算机的通信的程序。 2.网络通信协议 网络通信协议 :计算机之间进行通信规则。协议中对数据的传输格式、传输速率、传输步骤等做了 统一规定 TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet 最基本、最广泛 的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。 2.1协议的分类: UDP:用户数据报协议(User Datagram Protocol)。UDP协议是一个 面向无连接的协议 。传输数据时,不需要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小 限制在64k 以内。它是不可靠协议,因为无连接,所以 传输速度快,但是容易丢失数据 。日常应用中,例如 视频会议、QQ聊天 等。 TCP:传输控制协议

网络编程——TCP状态转换图详解

孤街醉人 提交于 2020-01-30 01:39:51
在前面, 已经介绍了TCP协议的三路握手和四次挥手。如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手)、数据传输、断开TCP连接通道(四次挥手)。 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过程。先看TCP状态状态转换图。 上半部分是TCP三路握手过程的状态变迁,下半部分是TCP四次挥手过程的状态变迁。 CLOSED:起始点,在超时或者连接关闭时候进入此状态,这并不是一个真正的状态,而是这个状态图的假想起点和终点。 LISTEN:服务器端等待连接的状态。服务器经过 socket,bind,listen 函数之后进入此状态,开始监听客户端发过来的连接请求。此称为应用程序被动打开(等到客户端连接请求)。 SYN_SENT:第一次握手发生阶段,客户端发起连接。客户端调用 connect,发送 SYN 给服务器端,然后进入 SYN_SENT 状态,等待服务器端确认(三次握手中的第二个报文)。如果服务器端不能连接,则直接进入CLOSED状态。 SYN_RCVD:第二次握手发生阶段,跟 3 对应,这里是服务器端接收到了客户端的 SYN,此时服务器由 LISTEN 进入 SYN_RCVD状态,同时服务器端回应一个 ACK,然后再发送一个 SYN 即 SYN+ACK 给客户端。状态图中还描绘了这样一种情况,当客户端在发送 SYN 的同时也收到服务器端的