网络编程

网络编程NIO-异步

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-04 23:56:08
异步I/O是没有阻塞地读写数据的方法。通常在代码进行read调用时,代码会阻塞 直至可供读取的数据。同样,write调用将会阻塞直至数据能够写入。 1、selector是一个对象,可以注册到很多个channel上,监听各个channel上发生 的事件,并且能够根据事件情况决定channel读写,这样通过一个线程管理多个channel 创建selector: Selector selector = Selector.open(); 注册channel到selector: channel.configureBlocking(false); SelectionKey key = chanenl.register(selector, SelecltionKey.OP_READ_; 注意,注册channel必须设置为异步模式才可以。register调用的返回值是 selectionKey。这个对象待办这个通道在此selector上的这个注册。当某个selector 通知你某个传入事件时,它是通过提高对应于该事件的SelectionKey来进行的。selectionKey 还可以用于取消通过的注册 2、channel和selector Channel channel = selectionKey.channel(); Selector selector = selectioKey

网络编程--杂识

天大地大妈咪最大 提交于 2020-02-04 23:46:02
/*--> */ /*--> */ 协议 ---- 乃是数据传输时要遵守的格式要求 两种常见的程序架构是 C/S 和 B/S 架构 C/S :优点,性能稳定,协议选用灵活,适用于大量数据缓存,尤以游戏较为常见 安装在用户电脑上,可能会对用户安全造成影响 开发效率方面,开发团队需编写服务端和客户端两端代码,联合调试是一场噩梦 B/S : 减少了厂商植入恶意插件的可能,相比 C/S 减少 1/3 工作量 ; 跨平台 必须支持 HTTP 协议,须不折不扣的支持 不支持庞大数据缓存 OSI 七层模型(物数网传会表应),除了 TCP 协议工作在传输层, /IP 协议工作在网络层,基本上说的出来的协议都工作在应用层 × 额外的知识模拟电路信号向数字信号的转换 物理层,这一层数据单位是比特(物理传输层) 数据链路层:定义 格式化数据,以帧为单位传输数据 网络层:不同位置,不同主机之间的链接 传输层 : 端口号和进程,对下层接收的数据进行分段和传输,到达目的地之后重组,这一层数据称之为段。 会话层:通过传输层建立,不同系统间的通信(通过 IP 或 MAC ) 表示层:确保不同系统应用层数据能相互理解,读取,如有可能,这层会有个通用格式来完成不同格式数据的转换 应用层:为用户程序提供网络服务 数据包的封装 由于协议的存在,实际发送的数据层层封装,原始数据上套上应用层…然后逐一套上传输,网络

网络编程模型 nio

末鹿安然 提交于 2020-02-04 23:15:32
1.简介 nio 是new io的简称,1.4之后提供。特性:为所有的原始类型提供缓存支持(Buffer),字符集编码解码解决方案,channel一个原始的i/o抽象,支持锁和内存映射文件的文件访问接口,提供多路(non-blcoking)非阻塞式的高伸缩性网络。 2.比较 bio 同步阻塞,jdk1.4之前使用,阻塞到读写方法,阻塞到线程来提高并发性能,效果一般 nio 同步非阻塞io,jdk1.4后,linux多路复用技术,实现io的轮询方式,目前是主流的网络通信模式,netty 框架, aio 异步非阻塞io ,jdk1.7后,基于linux的epoll模式,目前使用较少, 3.基本编程模型 服务端: 核心api ServerSocket 流程 ; 先创建一个服务,然后绑定在服务器的ip地址和端口 等待客户端的链接请求 收到连接请求后,接受请求,建立了一个tcp连接 从建立的连接中获取到socket输入、输出流(同步阻塞) 通过两个流进行数据的交互 客户端: 核心api Socket 流程 : 先向服务端请求连接 一旦被服务器接受,连接就创建好了 从tcp连接中获取socket输入、输出流 通过两个流进行数据的交互 3.原理 阻塞和非阻塞:阻塞和非阻塞是进程在访问数据时,数据是否准备就绪的一种处理方式,当数据没有准备好的时候, 阻塞是往往需要等待缓冲区中的数据准备好之后才处理

iOS-iphone网络编程总结

百般思念 提交于 2020-02-04 19:25:08
iphone网络编程总结 一:确认网络环境 3G/WIFI 1. 添加源文件和 framework 开发 Web 等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过 Apple 的审 ( 我们的 ) 查的。 Apple 的 例程 Reachability 中介绍了取得 / 检测网络状态的方法。要在应用程序程序中使用 Reachability ,首先要完成如下两部: 1.1. 添加源文件: 在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图: 1.2. 添加 framework : 将 SystemConfiguration.framework 添加进工程。如下图: 2. 网络状态 Reachability.h 中定义了三种网络状态: typedef enum { NotReachable = 0, // 无连接 ReachableViaWiFi, // 使用 3G/GPRS 网络 ReachableViaWWAN // 使用 WiFi 网络 } NetworkStatus; 因此可以这样检查网络状态: Reachability *r = [Reachability reachabilityWithHostName:@“ www.apple.com ”

网络编程UDP和TCP 二

爱⌒轻易说出口 提交于 2020-02-04 14:27:25
TCP TCP :一种面向连接(连接导向)的,可靠的,基于字节流的运输层,通讯协议 特点: 面向连接, 点到点的通信 高可靠性 占用系统资源多,效率低 UDP : 一种无连接的传输层协议,提供面向事务的简单不可靠信息传世服务 特点: 非面向连接,传输不可靠,可能丢失 发送不管对方是否准备好,接收方收到也不确认 可以广播发送 非常简单的协议,开销小 套接字Socket 我们开发的网络应用程序位于应用层,TCP和UDP 属于传输层协议 在应用层如何使用传输层的服务呢? 在应用层和传输层之间,则是使用套接字来进行分离 套接字就像是传输层为应用层开的一个小口,应用程序通过这个小口向远程发送数据,或者接收远程发来的数据,而这个小口以内,也就是数据进入这个口之后,或者数据从这个口出来之前,是不知道也不需要知道的,也不会关心他如何传输,这属于网络其他层次的工作 UDP编程 UDP发送端 package UDP编程 ; import java . net . DatagramPacket ; import java . net . DatagramSocket ; import java . net . InetSocketAddress ; import java . net . SocketException ; /** * 发送端 * 1.使用DatagramSocket 指定端口创建发送端

python网络编程

谁说我不能喝 提交于 2020-02-03 15:17:27
一:进程间的通信   1.本地进程间的通信   消息传递(管道,FIFO,消息队列)   同步(互斥量,条件变量,读写锁,文件和写记录锁,信号量)   共享内存(匿名的和具名的) 远程过程调用      2.网络进程间的通信   网络上的进程对得唯一区分,这样才能进行网络间的通信,比如QQ,微信聊天等等。而可以唯一区分的是进程的ip地址(互联网协议地址),协议,端口(设备与外界通讯的出口)。Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。 二:软件开发的架构   1.B/S架构(浏览器端、服务器端)   2.C/S架构(客户端、服务器端)   2.1 socket套接字就是,应用程序通过套接字向网络发出请求或者应答网络请求,使主机间或者计算机间的程序可以相互通信。 应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。   2.2 socket()函数     socket

网络编程简介——

谁说我不能喝 提交于 2020-02-03 15:07:02
软件开发架构 c/s架构(client/server) c:客户端 s:服务端 b/s架构(browers/server) b:浏览器 c:服务器 b/s架构本质就是c/s架构 手机端在未来b/s架构会变得更火 服务端就是24小时,不间断提供服务 客户端随时随地都能找服务端,体验服务 OSI协议 七层协议: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理连接层 可以将7层简化成5层 应用层 传输层 网络层 数据链路层 物理连接层 我们学习七层协议要从最底层学起 1.物理连接层 基于电信号010101二进制数据传输 2.数据链路层 1.规定电信号分组方式 2.规定任何一台接入互联网的计算机都必须有一块网卡 每一块网卡都是独一无二的,上面刻有12位16进制数 前六位是厂家编号,后六位是流水线编号 这12位数就被称之为mac地址 以上两点被称之为 '以太网协议' 交换机 基于以太网协议通信 不能跨局域网通信 互联网是n多个局域网连接而成的 3.网络层 IP协议 规定了每台连入互联网的计算机都必须有一个IP地址,IP地址也是独一无二的 IP地址特点:点分十进制 IP地址最小:0.0.0.0 IP地址最大:255.255.255.255 IP地址目前的两大版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本) IP地址是动态分布的 4.传输层

网络编程

你离开我真会死。 提交于 2020-02-03 09:51:08
网络编程 软件开发架构 c/s架构(client/server) c:客户端 s:服务端 b/s架构(browers/server) b:浏览器 c:服务器 b/s架构本质就是c/s架构 手机端在未来b/s架构会变得更火 服务端就是24小时,不间断提供服务 客户端随时随地都能找服务端,体验服务 OSI协议 七层协议: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理连接层 可以将7层简化成5层 应用层 传输层 网络层 数据链路层 物理连接层 我们学习七层协议要从最底层学起 1.物理连接层 基于电信号010101二进制数据传输 2.数据链路层 1.规定电信号分组方式 2.规定任何一台接入互联网的计算机都必须有一块网卡 每一块网卡都是独一无二的,上面刻有12位16进制数 前六位是厂家编号,后六位是流水线编号 这12位数就被称之为mac地址 以上两点被称之为 '以太网协议' 交换机 基于以太网协议通信 不能跨局域网通信 互联网是n多个局域网连接而成的 3.网络层 IP协议 规定了每台连入互联网的计算机都必须有一个IP地址,IP地址也是独一无二的 IP地址特点:点分十进制 IP地址最小:0.0.0.0 IP地址最大:255.255.255.255 IP地址目前的两大版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本) IP地址是动态分布的

android网络编程--从网络下载图片,并保存到内存卡

≡放荡痞女 提交于 2020-02-03 07:14:39
功能1:从网络上取得的图片显示到imageview上面,生成Bitmap时有两种方法,一种是先转换为byte[],再生成bitmap;一种是直接用InputStream生成bitmap。功能2:点击按钮将显示的图片下载到sd卡上。原文地址: http://www.cnblogs.com/gzggyy/archive/2013/05/18/3085552.html 下面就贴一种直接用InputStream生成bitmap的代码吧,另外一种直接看原文咯。mark一下,方便自己用 [html] view plain copy package com.robin.httpcommunicationtest; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.app.ProgressDialog; import android.graphics

解决网络编程的粘包问题

妖精的绣舞 提交于 2020-02-02 22:13:12
# 服务端 import socket import subprocess import struct import json servers = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) servers.bind(('127.0.0.1', 7777)) servers.listen(10) print('start settings') while True: """连接循环""" conn, adder = servers.accept() print('客服端的信息:', adder) while True: "通信循环" try: cmd = conn.recv(1024) # 1收命令 # 2执行命令的结果丢到管道里面存起来 obj = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 3从管道里面拿出数据 stdout = obj.stdout.read() stderr = obj.stderr.read() # 4制作报头 header_dict = {'filename': 'a.txt', 'md5': 'xxxx', 'total