网络编程

网络编程——网络基础(二)

旧街凉风 提交于 2020-01-22 01:09:53
Socket是何方妖怪? 1.socket与进程的关系 1).socket与进程间的关系:socket 用来让一个进程和其他的进程互通信息(IPC),而Socket接口是TCP/IP网络的API接口函数。 2).进程间通信(本机内) 进程间通信(不同计算机,要联网) 2、socket与文件的关系——如何理解socket是种特殊的I/O? 1)Socket最先应用于Unix操作系统,如果了解Unix系统的I/O的话,就很容易了解Socket了,因为Socket数据传输其实就是一种特殊的I/O。 2)可对其进行文件操作 3)有文件描述符。而文件描述符的本质是一个非负整数。只是用于区分。类似的还有进程ID。 3.服务器端口与连接个数的关系 1)服务端在8088上监听,然后生成一个新的socket与client通讯。(注意:服务器端监听端口是 不变的,但socket连接可以一直生成,一个线程对应一个socket.) 同一时刻,一个端口只能建立一个连接。 在一个端口监听,但是在监听端口的同时,生成一个等待队列,每一个来自客户端的连接都会送入等待队列中,服务器利用一定的算法进行选择相应的连接请求处理,所以在一个端口可以监听多各请求嘛。如果同时的连接过多,服务器相应每个连接的时间就会相应的变长。就会变慢。 2)QQ的实现方法就是在登陆的时候告诉服务器你已经登陆,发送消息的时候

「Python网络编程」再识多任务的真面目/多进程(三)

南楼画角 提交于 2020-01-22 00:25:02
博主前言: 上篇博客我讲述了多任务的一种实现方式—多线程。这篇博客我继续讲述使用进程的方式来实现多任务。由于进程的知识实属有点抽象,特别是结合线程来讲进程确实有点难度,所以在本篇博客开写之前,我借阅了多个论坛大佬写的有关于多进程的博客,所以这篇博客如有雷同,算我抄你的。但是我保证,百分之一大半都是自己理解所得。 1. 多进程 在「Python网络编程」系列第一篇博客讲端口号时,我们了解了有关进程的概念。 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是操作系统分配资源的基本单元,是操作系统结构的基础。 如果你觉得上段黑体字有点难以理解,那么你可以就把进程理解为运行着的程序也可。程序与进程的区别就是: 程序是静态的,进程是动态的。 我在网上看到一个公式觉得非常精辟: 进程 = 程序 + 资源 1.1 进程的状态 1)就绪状态(Ready): 进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。 结合上面的公式可以理解为, 就绪状态就是程序运行的资源已经准备好,等待CPU执行。 2)运行状态(Running): 进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目

java 网络编程

三世轮回 提交于 2020-01-21 21:31:15
在现实中,我们通过统一的度量,规定标准来约束大家的生活方方面面,而在虚拟的,我们也必须有这样的一套度量衡来平衡网络世界,这时候我们就用到了协议,其中TCP协议和UDP协议则是最常见的。 java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。 UDP:UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。 本教程主要讲解以下两个主题。 Socket 编程:这是使用最广泛的网络概念,它已被解释地非常详细。 URL 处理:这部分会在另外的篇幅里讲,点击这里更详细地了解在 Java 语言中的 URL 处理。 Socket Socket又被称之为套接字,我们可将其比喻为生活中的插座,当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。 java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。 以下步骤在两台计算机之间使用套接字建立TCP连接时会出现: 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。 服务器调用

网络编程知识总结

流过昼夜 提交于 2020-01-21 18:56:55
网络编程 1、概述 计算机网络: 计算机网络是指将 地理 位置不同的具有独立功能的多台 计算机 及其外部设备,通过通信线路连接起来,在 网络操作系统 , 网络管理软件 及 网络通信协议 的管理和协调下,实现 资源共享 和信息传递的计算机系统。 网络编程目的: 无限电台、传播交流信息、数据交换、通信...... 想要达到这个效果需要什么: 如何准确的定位网络上的一台主机 ip地址:端口,定位到这个计算机上的某个资源 找到了这个主机,如何传输数据? 概念B/S与C/: javaweb: 网页编程 B/S 网络编程:TCP/IP C/S 2、网络通信的要素 如何实现网络的通信? 通信双方的地址: ip:端口 规则:网络通信协议 TCP/IP参考模型: 小结: 网络编程中的两个主要问题: 如何准确的定位到网络上的一台或者多台主机 找到主机之后如何进行通信 网络编程中的要素: IP和端口号 IP 网络通信协议 UDP、TCP 万物皆对象: 在java中一定存在与网络通信相关的类 没有的类需要自己进行相关的定义 3、IP ip地址:InetAdress 唯一定位一台网络上的计算机 127.0.0.1:本机地址 即localhost ip地址的分类 ipv4/ipv6 IPV4:4个字节组成。约42亿,北美占了30亿,亚洲4亿,2011年已经用完 IPV6:12位。8个无符号整数,例如 1111

Linux网络编程-tcp缓存设置

谁都会走 提交于 2020-01-21 10:23:58
最近发现服务的逻辑完成时间很短,但是上游接收到的时间比较长,所以就怀疑是底层数据的序列化/反序列化、读写、传输有问题,然后怀疑是TCP的读写缓存是不是设置太小。现在就记录下TCP缓存的各配置项以及缓存大小的计算公式。 1.有关发送、接收缓存的配置 内核设置的套接字缓存 /proc/sys/net/core/rmem_default,net.core.rmem_default,套接字接收缓存默认值 (bit) /proc/sys/net/core/wmem_default,net.core.wmem_default,套接字发送缓存默认值 (bit) /proc/sys/net/core/rmem_max,net.core.rmem_max,套接字接收缓存最大值 (bit) /proc/sys/net/core/wmem_max,net.core.wmem_max,发送缓存最大值 (bit) tcp缓存 /proc/sys/net/ipv4/tcp_rmem:net.ipv4.tcp_rmem,接收缓存设置,依次代表最小值、默认值和最大值(bit) 4096 87380 4194304 /proc/sys/net/ipv4/tcp_wmem:net.ipv4.tcp_wmem,发送缓存设置,依次代表最小值、默认值和最大值(bit) /proc/sys/net/ipv4/tcp_mem:

Netty网络编程(三)

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-21 05:20:16
引导 引导(Bootstrapping)一个应用程序是指对它进行配置,使它运行起来的过程。Netty处理引导的方式使您的应用程序和网络层相隔离。引导负责将前面介绍的ChannelPipeline,ChannelHandler和EventLoop组织起来成为一个可实际运行的整体。 Bootstrap类   服务器致力于使用一个父channel来接受来自客户端的链接,并创建子channel以其相互之间的通信。而客户端将最可能只需要一个单独的,没有父channel的channel来用于网络交互。   两种类型的通用的引导步骤由AbstractBootstrap处理,而特定于客户端或服务器的引导步骤分别由Bootstrap和ServerBootstrap处理。 Bootstrap类的API 名称 描述 Bootstrap group(EventLoopGroup) 设置为处理channel所有事件的EventLoopGroup Bootstrap channel(class<? extends C>) Bootstrap channelFactory(ChannelFactory<? extends C> channel方法指定了Channel的实现类,如果该实现类没有提供替代的构造函数,可以通过调用CahnnelFactory方法指定一个工厂类,将会被bind()方法调用

网络编程 反射

╄→尐↘猪︶ㄣ 提交于 2020-01-21 02:10:55
一、网络编程 1.IP IP : 定位网络上的节点 ( 电脑 , 手机 , 服务器 , 路由器 . . . ) InetAddress * IP分类 : * ipv4 32 位 * ipv6 128 位 * 特殊的IP : * 非注册ip : 供组织内部使用 192.168 .0 .0 ~ 192.168 .255 .255 * 本地ip : 127.0 .0 .1 * ip - > 域名 : DNS服务器进行转换 2.端口 端口: 区分软件 InetSocketAddress 0~65535之间的整数,2个字节 自定义端口号推荐使用它8000以上 统一协议下端口号不能冲突 8000以内的预留端口号 80 : http 8080 : tomcat 3306 : mysql 1521 : oracle 3.传输层协议 标准,规范,协议 udp : 非面向连接 协议简单,开销小,不安全 大小有限制 tcp : 基于连接 3次握手 协议复杂,开销大,效率低 安全 大小没有限制 udp对socket实现 DatagramPacket: 打包|数据报包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。

网络编程——(5)TCP协议——多线程上传图片至服务端

主宰稳场 提交于 2020-01-20 22:15:49
在学习了TCP协议以后,我们可以做一些图片业务中简单的图片上传功能。 单机版的图片上传太鸡肋,一旦人数过多时,服务就会超时,所以就引入了多线程技术,多个线程处理不同的IP(主机)上传图片的业务。 首先看客户端: public class uploadpicThreadClient { public static void main(String[] args) throws IOException { //1、创建客户端socket Socket socket = new Socket("192.168.223.1", 9999); //2、读取客户端要上传的图片 FileInputStream fis = new FileInputStream("C:\\0.jpg"); //3、获取socket输出流,将读到的图片数据发给服务端 OutputStream outputStream = socket.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; //使用输出流写出图片数据 while ((len = fis.read(buf)) != -1) { outputStream.write(buf, 0, len); } // 告诉服务端,客户端数据已发送完毕,服务端停止读取 socket

Linux网络编程 - 套接字和地址

﹥>﹥吖頭↗ 提交于 2020-01-20 20:22:03
1. socket 到底是什么? 在网络编程,socket,中文翻译为 套接字,有的时候也叫套接口 。它的寓意是通过插口接入的方式,快速完成网络连接和数据收发。可以把它从想象成现实世界的电源插槽,或者早起上网需要的网络插槽,所以 socket也可以看做是对物理世界的直接映射。 先上一张图,可以看看: 这张图是网络编程中,客户端和服务端工作的核心逻辑。先从右侧服务端开始看,因为在客户端发起连接请求之前,服务端必须先初始化好。首先初始化socket,之后服务器执行 bind() 绑定,将自己的服务能力绑定在一个众所周知的地址和端口上。紧接着,执行 listen() ,将原先的 socket转化为服务端的socket,服务端最后阻塞在 accept() 等待客户端请求的到来。 服务端准备就绪后,客户端需要先初始化 socket,再执行 connect() 向服务端的地址和端口发起连接请求,这里的地址必须是客户端预先知晓的。这个过程就是 TCP三次握手,具体的后面会详细阐述。 三次握手成功后,客户端和服务端之间就可以进行数据传输。具体来说,客户端向内核发起write字节流写操作,内核协议栈将字节流从网络设备发送到服务端,服务端从内核得到信息,将字节流从内核读到进程中,并开始业务逻辑的处理,完成之后,服务端再将得到的结果以同样的方式写回到客户端。可以看到, 一旦连接建立

(30)java中的网络编程

自古美人都是妖i 提交于 2020-01-20 19:06:44
网络编程的概述 网络通信协议 1,网络编程的目的: 直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯 2,网络编程中有两个主要的问题: ①,如何准确地定位网络上一台或多台主机,定位主机上的特定的应用 ②,找到主机后如何可靠高效地进行数据传输 3,通信要素一:IP和端口号 ①,IP:唯一的标识Internet上的计算机(通信实体) ②,在Java中使用InetAddress类代表IP ③,IP分类:IPV4和IPV6;万维网和局域网 IP地址的分类方式 IP地址分类方式1 : IPV4 和 IPV6 IPV4 :4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已 经用尽。以点分十进制表示,如192.168.0.1 IPV6 :128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示, 数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984 IP地址分类方式2 : 公网地址( 万维网使用)和 私有地址( 局域网使用) 。192.168. 开头的就是私有址址,范围即为192.168.0.0–192.168.255.255,专门为组织机 构内部使用 端口分类 : 公认端口 :0~1023。被预先定义的服务通信占用(如HTTP占用端口80) 注册端口 :1024~49151