socket

java网络编程下

做~自己de王妃 提交于 2020-03-06 03:32:29
发送端 import java . io . IOException ; import java . net . DatagramPacket ; import java . net . DatagramSocket ; import java . net . InetAddress ; /* 流程: 1. 创建UDP服务器对应的发送端Socket 2. 准备对应数据包,需要带有指定数据 3. 发送数据 send 4. 关闭UDP发送端 */ public class SenderDemo1 { public static void main ( String [ ] args ) throws IOException { System . out . println ( "发送端启动" ) ; // 创建对应的Socket DatagramSocket socket = new DatagramSocket ( ) ; // 准备数据包 byte [ ] bytes = "今天中午吃蒸羊羔..." . getBytes ( ) ; DatagramPacket packet = new DatagramPacket ( bytes , // 字节数组数据 bytes . length , // 字节数组数据长度 InetAddress . getLocalHost ( ) , /

Reactor模式和Proactor模式

橙三吉。 提交于 2020-03-06 02:04:54
Reactor 主线程往epoll内核事件表中注册socket上的读就绪事件 主线程调用epoll_wait等待socket上有数据可读 当socket上有数据可读时,epoll_wait通知主线程,主线程则将socket可读事件放入请求队列。 睡眠在请求队列上的某个工作线程被唤醒,它从socket读取数据,并处理客户请求,然后往epoll内核事件表中注册该socket上的写就绪事件。 主线程调用epoll_wait等待socket可写 当socket可写时,epoll_wait通知主线程,主线程将socket可写事件放入请求队列 睡眠在请求队列上的某个工作线程(工作线程从请求队列读取事件后,根据事件的类型来决定如何处理它,没有必要区分读工作线程和写工作线程)被唤醒,它往socket上写入服务器处理客户请求的结果 Reactor模式的缺点:   Reactor处理耗时长的操作(如文件I/O)会造成事件分发的阻塞,影响到后续事件的处理。   因此涉及到文件I/O相关的操作,需要使用异步I/O,即使用Proactor模式效果更佳。 Proactor 主线程调用aio_read向内核注册socket上的读完成事件,并告诉内核用户缓冲区的位置,以及读操作完成时如何通知应用程序(可以用信号) 主线程继续处理其他逻辑 当socket上的读数据被读入用户缓冲区后,内核向应用进程发送一个信号

TCP、UDP有关函数

我与影子孤独终老i 提交于 2020-03-06 01:27:13
首先看一下上一篇三次握手四次挥手文章中提到的原理图。 其中的read对应的就是recv函数,write对应的就是send函数。 步入正题,函数的使用: 1.TCP客户端 socket : 创建套接字 函数原型 : int socket ( int family , int type , int protocol ) ; 功能:创建一个用于网络通信的socket套接字(描述符) 参数 : @family : 协议族 ( AF_INET、AF_INET6、PF_PACKET ) @type : 套接字类 ( SOCK_STREAM、SOCK_DGRAM、SOCK_RAW ) @protocol : 协议类别 ( 0 、IPPROTO_TCP、IPPROTO_UDP ) ( 一般传 0 , 自动匹配 ) 返回值 : 套接字 特点 : 创建套接字时 , 系统不会分配端口。 创建的套接字默认属性是主动的 , 即主动发起服务的请求 ; 当作为服务器时 , 往往需要修改为被动的。 ( listen ) 头文件 : # include <sys/socket.h> connect : 连接“服务器” 函数原型 : int connect ( int sockfd , const struct sockaddr * addr , socklen_t len ) ; 功能 : 主动跟服务器建立链接

Python 网络编程之 TCP 与 UDP

血红的双手。 提交于 2020-03-05 23:35:22
Socket(套接字) 介绍 UDP 和 TCP 协议之前,先熟悉下 socket 的基本概念。 基本概念 Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元,在网络通信过程中端点的一种抽象表示。网络中使用 Socket 传输数据是一种特殊的网络 I/O。 工作模式 打开open -> 读写write/read -> 关闭close 五种信息 socket 包括了数据传输必须的五元组,分别为源IP、源端口、目的IP、目的端口和协议号 通信机制 基于流(stream)或者基于数据报(datagram) python 中使用 import socket socket.socket(...) UDP UDP(User Datagram Protocol) 用户数据报协议,是一种面 向无连接 的协议,提供简单不可靠的信息传输服务,发送后不会确认信息是否到达。 UDP 通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中"写信"。 使用 socket 使用 UDP 的收发数据,先看原理图 客户端代码实现 # 客户端 发送数据 # 1.创建udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: send_data = input(

nginx与php-fpm通信的两种方式

故事扮演 提交于 2020-03-05 17:41:44
简述 在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。 unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。 tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。 windows系统只能使用tcp socket的通信方式 配置方法 tcp socket:tcp socket通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。 location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } unix socket:unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址。 //service php-fpm start生成.sock文件 location ~ \.php$ { include

几种网络服务器模型的介绍与比较

五迷三道 提交于 2020-03-05 16:52:59
原文链接 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。 本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,并未推荐 Windows 接口,读者可以自行查阅对应的 Windows 接口。 阻塞型的网络编程接口 几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv() 等接口开始的。使用这些接口可以很方便的构建服务器 / 客户机的模型。 我们假设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。 图 1. 简单的一问一答的服务器 / 客户机模型 我们注意到,大部分的 socket 接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是

在单机上启动多个mysql实例

谁都会走 提交于 2020-03-05 11:03:10
环境:win8,cygwin64,mysql5.6.17 通过该操作了解mysql的配置文件读取,以及一些相应文件的作用 1、创建配置文件myinstance2.ini,其内配置为 [mysqld] basedir=/usr/local/mysql datadir=/cygdrive/d/temp1/myinstance2/data port=3312 server_id=101 socket=/var/lib/mysql/mysql_instatnce2.sock pid-file= mysql_instatnce2.pid 2、启动服务器 ./bin/mysqld.exe --defaults-file=/cygdrive/d/temp1/myinstance2/myinstance2.ini 3、连接服务器 ./bin/mysql.exe -uroot --socket=/var/lib/mysql/mysql_instatnce2.sock 4、停止服务器 ./bin/mysqladmin.exe -uroot --socket=/var/lib/mysql/mysql_instatnce2.sock shutdown 5、特殊说明 datadir:每个实例必须指向自己的数据文件的路径,否则第二个启动的server会一直报错 socket:用于指定socket文件

Java NIO 底层原理

旧城冷巷雨未停 提交于 2020-03-05 10:06:43
目录 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步阻塞IO(Blocking IO) 1.4. 同步非阻塞NIO(None Blocking IO) 1.5. IO多路复用模型(I/O multiplexing) 1.6. 异步IO模型(asynchronous IO) 小结一下: 本文的知识,在《 Netty Zookeeper Redis 高并发实战 》 1.1. Java IO读写原理 无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。 用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。 先强调一个基础知识:read系统调用,并不是把数据直接从物理设备,读数据到内存。write系统调用,也不是直接把数据,写入到物理设备。 read系统调用,是把数据从内核缓冲区复制到进程缓冲区;而write系统调用,是把数据从进程缓冲区复制到内核缓冲区。这个两个系统调用,都不负责数据在内核缓冲区和磁盘之间的交换。底层的读写交换

一个简单的socket服务器实现

萝らか妹 提交于 2020-03-05 07:36:18
目录 什么是socket socket基本操作API函数 socket服务器的实现 附录:网络字节序与主机字节序 什么是socket socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,在网络应用程序设计时,由于TCP/IP的核心内容被封装在操作系统中,如果应用程序要使用TCP/IP,可以通过系统提供的TCP/IP的编程接口来实现,socket是操作系统抽象出一个概念,连接传输层与应用层的上层应用 如图中所示套接字(socket)是一个抽象层,继承了Linux下“万物皆文件”的思想,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合 socket基本操作API函数 1. socket()函数 函数原型及所需的头文件 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); (1)作用:socket()函数用来创建一个socket描述符,socket描述符类似于普通的文件描述符,可以进行读写操作,一个socket描述符唯一指定一个socket (2)三个参数: domain:即协议域