网络编程

网络编程学习笔记(一)网络基础知识

℡╲_俬逩灬. 提交于 2019-12-20 04:02:55
1、网络通信协议:计算机网络中实现通讯必须有一些约定的协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。 2、网络通讯接口:为了使两个结点之间能进行对话,必须在它们之间建立通讯工具(即接口),使彼此之间能进行信息交换,接口包括两部分: (1)硬件装置:实现结点之间的信息传送(理解成网卡) (2)软件装置:规定双方进行通讯的约定协议 3、通讯协议分层:同层之间可以通讯,上一层可以调用下一层,而与再下一层不发生联系,各层互不影响,便于系统的扩展。网络协议分层通常把用户应用程序作为最高层,物理通讯线路作为最底层,将期间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。只要彼此之间接口不变,每一层都可以自己独立扩展。应用程序编程即只编应用的一层,底层的东西都被屏蔽掉了,不用关心,只要知道接口就可以。分层思想无处不在,上级给下级下达命令,也是一层一层,运用到分层的思想。 实际开发中,应用到的是四层模型,网络层(IP层)、传输层(TCP、UDP层) 通讯的传输过程:A机器—>A的应用程序层—>A的 TCP\UDP层—>A的IP层—>A的物理层—>B机器的物理层—>B的IP层—>B的 TCP\UDP层—>B的应用程序层—>B机器   IP协议的最大的贡献就是提供了独一无二的IP地址,便于机器之间通讯。计算机内部用四个字节(IPV4)代表Ip地址,每一个部分是0

网络编程

♀尐吖头ヾ 提交于 2019-12-20 04:01:57
概述 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络。在操作系统、网络管理软件及网络通信协议的管理和协调下,可以实现计算机之间的资源共享和信息的传递。 网络编程是指用来实现网络互联的不同计算机上运行的程序间可以进行数据交换。对我们来说即如何用编程语言 java 实现计算机网络中不同计算机之间的通信。 1.网络通信三要素 IP地址 网络中计算机的唯一标识; 32bit(4 字节),一般用“点分十进制”表示,如 192.168.1.158; IP 地址=网络地址+主机地址 可分类: A 类:第 1 个 8 位表示网络地址。剩下的 3 个 8 位表示主机地址 (主要留给ZF或者大型企业) B 类:前 2 个 8 位表示网络地址。剩下的 2 个 8 位表示主机地址 (主要分配给中等规模的公司) C 类:前 3 个 8 位表示网络地址。剩下的 1 个 8 位表示主机地址 (分配给小公司或者个人) D 类地址用于在 IP 网络中的组播 E 类地址保留作研究之用。 Java 编程中可使用 InetAddress 类来操纵 IP 地址 public static void main(String[] args) throws UnknownHostException { InetAddress localHost = InetAddress

网络编程

只愿长相守 提交于 2019-12-20 04:01:12
网络编程 软件开发架构 c/s架构(client/server) ​ c:客户端 和 s:服务端 ​ 例如: QQ,微信,网盘,这一类都属于c/s架构,我们都需要下载一个客户端才能够运行 ​ ps:这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。 b/s架构(browser/server) ​ b:浏览器 和 s:服务器 ​ 例如:百度,淘宝网页,博客园这类都属于b/s架构,我们可以直接通过浏览器访问直接使用的应用 ​ ps:Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 用大白话来总结客户端和服务端的作用基本上可以理解为: 服务端:24小时不间断提供服务 客户端:什么时候想体验服务就去服务端寻求服务 b/s架构的本质其实也是c/s架构,两者都是用于两个程序之间通讯的开发 网络基础 网络编程技术起源 绝大部分先进技术的兴起基本都来自于军事,网络编程这项技术就是来源于美国军事,为了实现数据的远程传输 人类实现远程沟通交流的方式 - 插电话线的电话 - 插网线的大屁股电脑 - 插无线网卡的笔记本电脑 综上我们能够总结出第一个规律

Java高并发网络编程(一)

孤者浪人 提交于 2019-12-20 04:00:46
一、OSI网络七层模型 因特网是一个极为复杂的网络,分层有助于我们对网络的理解 。分层也是一种标准,为了使不同厂商的计算机能够互相通信,以便在更大范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。 ISO组织制定了OSI网络七层模型 应用层 表示层 会话层 传输层 网络层 链路层 物理层 而因特网只用到了五层 应用层 传输层 网络层 链路层 物理层 低三层: 屏蔽底层网络的复杂性 物理层:使原始的数据比特流能在物理介质上传输。 数据链路层:通过校验、确认和反馈重发等手段,形成稳定的数据链路。(01010101) 网络层:进行路由选择和流量控制。(IP协议) 传输层:提供可靠的端口到端口的数据传输服务(TCP/UDP协议)。 高三层: 会话层:负责建立、管理和终止进程之间的会话和数据交换。 表示层:负责数据格式转换、数据加密与解密、压缩与解压缩等。 应用层:为用户的应用进程提供网络服务。 网络通信协议 二、传输层控制协议TCP 传输层控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接。 1.TCP握手机制 检测网络是否通畅 三、用户数据报协议UDP 用户数据报协议UDP是Internet传输层协议。提供无连接、不可靠、数据尽力传输服务。 TCP和UDP比较 四

【转载】2. Linux 网络编程——网络字节序、地址转换

こ雲淡風輕ζ 提交于 2019-12-20 04:00:12
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然, 如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢? 答案是: 面向连接和无连接指的都是协议。 也就是说,这些术语指的并不是物理介质本身,而是用来说明如何在物理介质上传输数据的。面向连接和无连接协议可以,而且通常也确实会共享同一条物理介质。 如果两者的区别与承载数据的物理介质无关,又和什么有关呢?它们的本质区别在于, 对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。 无连接协议 中的分组被称为数据报(datagram),每个分组都是独立寻址,并由应用程序发送的。 从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系, 这就意味着协议很可能是不可靠的。 也就是说,网络会尽最大努力传送每一个数据报,但并不保证数据报不丢失、不延迟或者不错序传输。 另一方面, 面向连接的协议 则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长期的对话。记住这些状态

UDP网络编程

我与影子孤独终老i 提交于 2019-12-19 09:08:12
​ ​ IP地址和端口 IP地址:是计算机在网络中的唯一标示,我们在进行网络编程时一定要定位到远程计算机,而IP地址就是解决这个问题的。 端口:除了计算机外我们还要定位到具体的应用程序进程,而端口就是给应用程序分配的身份标示。 UDP和TCP UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。 2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64kB之内。 3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。 TCP:1,面向连接的协议,在socket之间进行数据传输之前必须要建立连接,是通过三次握手来建立连接的,所以在TCP中需要连接时 间。 2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。 3,TCP是一个可靠的协议,它确保接收方完全正确的获取发送方所发送的全部数据。 数据帧格式 ​ Socket 简单理解下,Socket就是一个应用程序编程的机制和一种接口,可以理解为是应用程序创建的一个港口码头,应用程序只要把装着货物的集装箱(在程序中就是要通过网络发送的数据)放到港口码头上,就算完成了货物的运送,剩下来的工作就由货运公司去处理了(在计算机中由驱动程序来充当货运公司)。如果把DatagramSocket比喻为创建的港口码头

Socket网络编程--FTP客户端(1)(Windows)

吃可爱长大的小学妹 提交于 2019-12-19 09:01:30
  已经好久没有写过博客进行分享了。具体原因,在以后说。   这几天在了解FTP协议,准备任务是写一个FTP客户端程序。直接上干货了。 0.了解FTP作用   就是一个提供一个文件的共享协议。 1.了解FTP协议   FTP有指令和响应码。FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。   像这种利用交换信息来进行简单的控制,这种协议,还真的很好玩的说。 命令与响应码部分信息如下       2. 安装一个FTP服务器   我们先安装一个FTP服务器,用于测试,这里是用FileZilla Server作为FTP服务器。   启动后,增加一个用户user/user 3.FTP客户端源代码讲解   下面这个是FTPAPI.h文件 1 #ifndef FTPAPI_H_INCLUDED 2 #define FTPAPI_H_INCLUDED 3 4 #include <stdio.h> 5 #include <winsock2.h> 6 7 SOCKET socket_connect(char *host, int port); 8 SOCKET connect_server(char

Socket网络编程--FTP客户端(1)(Windows)

风流意气都作罢 提交于 2019-12-19 09:00:54
Socket网络编程--FTP客户端(1)(Windows)   已经好久没有写过博客进行分享了。具体原因,在以后说。   这几天在了解FTP协议,准备任务是写一个FTP客户端程序。直接上干货了。 0.了解FTP作用   就是一个提供一个文件的共享协议。 1.了解FTP协议   FTP有指令和响应码。FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。   像这种利用交换信息来进行简单的控制,这种协议,还真的很好玩的说。 命令与响应码部分信息如下       2. 安装一个FTP服务器   我们先安装一个FTP服务器,用于测试,这里是用FileZilla Server作为FTP服务器。   启动后,增加一个用户user/user 3.FTP客户端源代码讲解   下面这个是FTPAPI.h文件 1 #ifndef FTPAPI_H_INCLUDED 2 #define FTPAPI_H_INCLUDED 3 4 #include <stdio.h> 5 #include <winsock2.h> 6 7 SOCKET socket_connect(char *host, int port); 8

Socket网络编程--Libev库学习(3)

僤鯓⒐⒋嵵緔 提交于 2019-12-19 09:00:33
  这一小节继续讲解各个观察器(Watcher).   上一小节已经讲解了ev_io(IO可读可写观察器),ev_stat(文件属性变化观察器),ev_signal(信号处理观察器),ev_timer(定时器),ev_periodic(周期任务处理),ev_child(子进程状态变化观察器)。这一小节准备讲ev_fork(创建的进程时的观察器),ev_async(异步调用观察器),ev_cleanup(event loop退出时触发事件),ev_prepare(每次event loop之前事件),ev_check(每次event loop之后事件),ev_idle(每次event loop空闲触发事件).   ev_async (ev_async当ev_async_send通过watcher调用时调用,触发EV_ASYNC) 1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <stdlib.h> 5 #include <ev.h> 6 7 ev_async async_watcher; 8 9 static void sigint_callback(struct ev_loop *loop,ev_signal * w,int revents) 10 { 11 if(revents

Socket网络编程--小小网盘程序(1)

℡╲_俬逩灬. 提交于 2019-12-19 09:00:04
  这个系列是准备讲基于Linux Socket进行文件传输。简单的文件传输就是客户端可以上传文件,可以从服务器端下载文件。就这么两个功能如果再加上身份验证,就成了FTP服务器了,如果对用户的操作再加上一些功能(如分享),就可以作为一个最简单的网盘了。想想是不是有点小激动啊。   我这一小节就不讲那么高级的东西,就先了解文件怎么传输,我们以前的聊天程序传输数据都是一次发送就完成本次的发送,因为一个sendBuf是足够的。但是对于二进制文件来说,文件的大小就不一定了,有可能很大,所以我们的Buf是不知道要多少的。所以要传输大文件,就要分多次传输,然后在目的地进行合并。这样就可以实现大文件传输了。传输的方法有两种,一种是串行一种是并行。我接下来要实现的代码是使用串行传输的,因为比较简单,而并行传输,比较复杂,要传输几个控制信号,保证数据合并重整后不会出错。并行可以使用多进(线)程。优点是可以同时传输多个文件,串行是只能一次传输一个文件。我们看一下网盘,大多是可以下载多个文件(多任务)是吧?应该用的就是并行了。如果只是从原理上讲串行的传输速度肯定是比并行的快,因为并行还要控制信号要传,而且还要重新合并整合成一个文件。既然这样那为什么所有的网盘都是使用多任务下载呢?(多个任务同时下载,每个任务同时还有多个端口在接收数据)。是因为我们所处的网络环境问题。我们的网络环境并不是那么的稳定