网络编程

socket网络编程函数详解

泪湿孤枕 提交于 2020-01-14 04:43:18
文章目录 1.高性能网络编程(一)----accept建立连接 2.高性能网络编程2----TCP消息的发送 3.高性能网络编程3----TCP消息的接收 4.高性能网络编程4--TCP连接的关闭 5.高性能网络编程5--IO复用与并发编程 6.高性能网络编程6--reactor反应堆与定时器管理 7.高性能网络编程7--tcp连接的内存使用 俗话说的好,站在巨人的肩膀上学习,提高的才更快啊; 不懂的解释,可以看相关的评论 1.高性能网络编程(一)----accept建立连接 https://blog.csdn.net/russell_tao/article/details/9111769 2.高性能网络编程2----TCP消息的发送 https://blog.csdn.net/russell_tao/article/details/9370109 3.高性能网络编程3----TCP消息的接收 https://blog.csdn.net/russell_tao/article/details/9950615 4.高性能网络编程4–TCP连接的关闭 https://blog.csdn.net/russell_tao/article/details/13092727 5.高性能网络编程5–IO复用与并发编程 https://blog.csdn.net/russell_tao

J2SE(13)之网络编程(Socket实现多人聊天)

南笙酒味 提交于 2020-01-14 01:29:40
1、初始版本 该版本实现:客户端可以把键盘录入的消息发送到服务端,服务端再把这个消息返回给客户端: 1.1 服务端 import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(9999); Socket socket = server.accept(); //获取输入输出流 DataInputStream dis = new DataInputStream(socket.getInputStream()); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); //获取数 String msg = dis.readUTF(); //输出信息 dos.writeUTF("服务端接收到消息:"+msg); dos.flush

NIO非阻塞网络编程

十年热恋 提交于 2020-01-13 01:46:08
目录 目标 JAVA NIO Buffer缓冲区 Buffer工作原理 Buffer基本使用 ByteBuffer内存类型 Channel通道 SocketChannel ServerSocketChannel Selector选择器 NIO对比BIO 小结 目标 了解NIO、熟悉Buffer API、channel、selector,NIO+多线程 JAVA NIO NIO:new IO,非阻塞IO。 目的是为了解决替换掉IO网络编程的相关API。 Buffer缓冲区 内存块中包含了NIO Buffer对象,对象提供了一组方法,可以操作这个内存块。 比Input和output操作更方便更容易操作,写入和读取需要手动记录和跟进。 Buffer工作原理 更方便的操作,是因为里面记录了每一个操作点,同时还提供了数组操作的封装。 主要关注API的使用。 Buffer基本使用 注意读写的转换,读和写模式下参数含义不一样。 put();写 flip();转换 public static void main ( String [ ] args ) { // 构建一个byte字节缓冲区,容量是4,堆内的内存 ByteBuffer byteBuffer = ByteBuffer . allocate ( 4 ) ; // 默认写入模式,查看三个重要的指标 System . out .

【网络编程小结(三)】利用多进程与多线程

∥☆過路亽.° 提交于 2020-01-12 23:35:49
在第一节的例子中,服务器是一个时间获取程序,只要一次write调用就能立刻完成客户端的任务,但是我们要想的是,服务端不一定每次都会这么快的完成任务,所以,要想办法加快服务端的处理速度。 首先可以想到的是并行处理,c++有两种方式,一个是多进程,一个是多线程。下面描述这两种办法。 一、压力测试 我们的客户端应当有能力判断服务端处理的快慢,所以我们要写一个压力测试函数: void request_to_server(int id,const char* ip,const uint16_t port){ int sockfd=socket(AF_INET,SOCK_STREAM,0); const char *id_str=std::to_string(id).c_str(); sockaddr_in addr; bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(port); inet_pton(AF_INET,ip,&addr.sin_addr); connect(sockfd,(const sockaddr*)&addr,sizeof(addr)); const int buffersize=1024; char buf[buffersize]; write(sockfd,id_str

python——网络编程详解

萝らか妹 提交于 2020-01-12 17:31:34
广域网,局域网: 1、局域网 局域网(Local Area Network),简称LAN,是指在某一区域内由多台计算机互联成的计算机 组。“某一区域”指的是同一办公室、同一建筑物、同一公司和同一学校等,一般是方圆几 千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内 的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台 计算机组成,也可以由一个公司内的上千台计算机组成。 2、广域网 广域网(Wide Area Network),简称WAN,是一种跨越大的、地域性的计算机网络的集合。通 常跨越省、市,甚至一个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可 以是小型的广域网。 3、局域网和广域网的区别 局域网是在某一区域内的,而广域网要跨越较大的地域,那么如何来界定这个区域呢?例 如,一家大型公司的总公司位于北京,而分公司遍布全国各地,如果该公司将所有的分公司 都通过网络联接在一起,那么一个分公司就是一个局域网,而整个总公司网络就是一个广域 网。 网络七层模型 网络七层模型 应用层 – 表示层 – 会话层 – 传输层 TCP/UDP – 网络层 IP协议 – 数据链路层 网卡地址 – 物理层 网卡 单播、组播、广播 1、单播:主机之间“一对一”通信,路由器并不对其进行复制。 2、广播:“一对多”、 3、组播:

网络编程 CS/BS 架构 互联网通信的原理 osi七层协议 UDP与TCP TCP的三次握手,四次挥手

六月ゝ 毕业季﹏ 提交于 2020-01-11 16:31:25
day27 网络编程 一丶CS/BS 架构 C/S: 客户端/服务器 定义: 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大 比如: qq、微信、网盘、优酷这一类是属于需要安装的桌面应用 优点: 安全性高,个性化设置,功能全面,响应速度快 缺点: 开发成本高,维护成本高.面向的客户固定 B/S:浏览器/服务器 定义: Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 比如: 百度、知乎、博客园等使用浏览器访问就可以直接使用的应用 优点: 开发维护成本低,面向用户广泛 缺点: 安全性相对低,响应速度相对慢,个性化的设置单一 二丶互联网通信的原理 1.首先通过各种物理连接截至连接 2.精准找到对方计算机(软件)的位置 3.通过统一的标准协议(互联网协议:一系列的协议)进行数据的收发. 三丶osi七层协议 物理层: 功能 : 主要是基于电器特性发送高低压(电信号), 0低压 1高压 传输介质 : 光纤 ,双绞线 数据链路层: 功能 : 将电信号进行分组 以太网协议 : 对比特流数据进行分组. 一组电信号构成一个数据报,也称作'帧' 每一数据报(帧)由:

Python网络编程之因特网客户端编程

懵懂的女人 提交于 2020-01-10 13:40:29
Python网络编程之因特网客户端编程 因特网客户端简介 文件传输: 文件传输因特网协议 文件传输协议(FTP) Python与FTP ftplib.FTP类的方法 因特网客户端简介 在学习之前,我们要了解因特网客户端到底是什么? 简单的来说,因特网可以理解为用来传输数据的地方,数据在服务提供者和服务使用者之间传输。在某些情况下成为“生产者-消费者”。服务器就是生产者,提供服务,而客户端使用服务。对特定的服务,一般只有一个服务器(进程或主机),但有多个消费者(类似C/S模型一样)。 文件传输: 文件传输因特网协议 有很多协议可以用于因特网上传输协议。最流行的包括: 文件传输协议(FTP)、UNIX到UNIX复制协议(UUCP)、用于web的超文本传输协议(HTTP)。 文件传输协议(FTP) FTP主要用于匿名下载公共文件,也可以用于两台计算机之间传输文件,特别是在使用windows进行工作,而文件存储系统使用UNIX的情况下。FTP要求输入用户名和密码才能远程访问FTP服务器,但也允许没有账号的用户匿名登录。不过管理员要先设置FTP服务器已允许匿名用户登录。 FTP协议工作流程如下: 1. 客户端连接远程主机上的FTP服务器。 2. 客户端输入用户名和密码(或匿名登录,即输入‘anonymous’和电子邮箱地址作为密码)。 3. 客户端进行各种文件传输和消息查询操作。 4.

【8.0】网络编程(TCP/UDP)

这一生的挚爱 提交于 2020-01-10 07:07:27
目录 一、TCP和UDP 1、TCP 2、UDP 3、区别 4、适用场景 二、套接字实现UDP和TCP 1、TCP 2、UDP 一、TCP和UDP 1、TCP 传输控制协议,提供面向连接、可靠的字节流服务。客户和服务器彼此必须建议一个TCP连接之后才能开始传输数据。 2、UDP 用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是并不能保证他们能到达目的地。 3、区别 TCP是 面向连接 ,UDP是面向 无连接 。 TCP面向字节流,UDP是基于数据报。 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 tcp优点 可靠、稳定。TCP可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认,窗口、重传、拥塞控制机制,数据传完之后,还会断开连接用来节约系统资源。 缺点 慢,效率低,占用系统资源高,易被攻击。在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。然而,每个连接都会占用系统的CPU,内存等硬件资源。因为TCP有确认机制,三次握手机制,导致TCP容易被利益,实现DOS,DDOS,CC的攻击。 UDP优点 快,比TCP稍安全。UDP没有TCP拥有的各种机制

网络编程进阶:并发编程之协程、IO模型

三世轮回 提交于 2020-01-10 06:56:57
协程: 基于单线程实现并发,即只用一个主线程(此时可利用的CPU只有一个)情况下实现并发; 并发的本质:切换+保存状态 CPU正在运行一个任务,会在两种情况下切走去执行其他任务(切换有操作系统强制控制),一种情况是该任务发生了阻塞,另一种是该任务计算的时间过长或有一个优先级更高的程序替代了它 在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 如果多个任务都是纯计算的,上图的情况2并不能提升效率,因为只是让CPU来回切,这样看起来所有任务都被“同时”执行的效果,此时这种切换反而会降低效率; yield本身就是一种在单线程下可以保存任务运行状态的方法,其特点如下:   1. yield可以保存状态,yield的状态保存于操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级   2. send可以把一个函数的结果传递给另外一个函数,以此实现单线程内程序之间的切换;yield并不能实现遇到io切换 在任务1遇到io情况下,切到另外一个任务去执行,这样就可以利用任务1阻塞的时间完成其他任务的计算,效率的提升就在此处 对于单线程下,我们不可避免程序中出现io操作,如果我们能在自己的程序中(即用户程序级别,而非操作系统级别)控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另一个任务去计算

网络编程(套接字)------SocketAddress代表IP地址和端口的类

最后都变了- 提交于 2020-01-10 06:44:00
代码: package cn.tedu.net.address; import java.net.InetSocketAddress; public class InetSocketAddressDemo { public static void main(String[] args) { //创建代表IP地址和端口的类的对象 InetSocketAddress inetSocketAddress=new InetSocketAddress (“localhost”,8090); //localhost映射成的IP地址127.0.0.1 //127.0.0.1永远指向本地 //返回IP地址、主机名(计算机名称)、端口号 System.out.println(inetSocketAddress.getAddress()); System.out.println(inetSocketAddress.getHostName()); System.out.println(inetSocketAddress.getPort()); } } 输出: localhost/127.0.0.1 localhost 8090 代码图: 来源: CSDN 作者: 佳乐一百 链接: https://blog.csdn.net/qq_45453185/article/details/103889064