服务端代码: #include<WinSock2.h> #include<Windows.h> #include<vector> #include<stdio.h> #include<iostream> #pragma comment(lib,"ws2_32.lib") enum CMD { CMD_Login, CMD_Login_Result, CMD_Logout, CMD_Logout_Result, CMD_ERRO…
socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket socket  原文: 将一个socket 设置成阻塞模式和非阻塞模式,使用fcntl方法,即: 设置成非阻塞模式: 先用fcntl的F_GETFL获取flags,用F_SETFL设置flags|O_NONBLOCK; 即: flags = fcntl(sockfd, F_GETFL, 0);    …
Windows用以下方法将socket设置为非阻塞方式 : unsigned long ul=1; SOCKET s=socket(AF_INET,SOCK_STREAM,0); int ret=ioctlsocket(s, FIONBIO, (unsigned long *)&ul);//设置成非阻塞模式. if(ret==SOCKET_ERROR)//设置失败. { } Linux用以下方法将socket设置为非阻塞方式  int flags = fcntl(socket, F_GETFL,…
接上篇 单点登录(SSO)解决方案之 CAS 入门案例 服务端数据源设置: 开发中,我们登录的user信息都是存在数据库中的,下面说一下如何让用户名密码从我们的数据库表中做验证. 案例中我最终把cas的tomcat放在了192.168.44.31这一台虚拟机上,我的mysql数据库也在这个服务器上,里面有一个test数据库,其中有一张tb_user表: 两个用户,密码都是md5加密的123456. 下面我们修改配置数据源的配置: 1,修改cas服务端中web-inf下deployerConfig…
2.CAS服务端数据源设置 2.1需求分析 我们现在让用户名密码从我们的品优购的user表里做验证 2.2配置数据源 (1)修改cas服务端中web-inf下deployerConfigContext.xml ,添加如下配置 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" p:driverClass="com.mysql.jdbc.Driver"…
1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket( _In_ int af, _In_ int type, _In_ int protocol ); SOCKET WSASocket( _In_ int af, _In_ int type, _In_ int protocol, _In_ LPWSAPROTOCOL_INFO lpProtocolInfo, _In_ GROUP g,…
一.现象:in a frame because it set 'X-Frame-Options' to 'deny'. 二.服务配置 因为,有时候为了防止网页被别人的网站iframe,我们可以通过在服务端设置HTTP头部中的X-Frame-Options信息. X-Frame-Options 响应头有三个可选的值:DENY:页面不能被嵌入到任何iframe或frame中:SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中:ALLOW-FROM:页面允许frame或fram…
呵呵,理解得不深,但毕竟手打全版,且无错.但select.h不知何处找头文件, 粘下来作个记录. POLL,EPOLL感觉代码类似,只是函数和系统实现不一样,,EPOLL目前最合理的.定位精确,算法复杂度最好. #include "select.h" #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/select.h> #include…
python版本 python3.6 (其他版本需要小改,版本>python3.4) 参考网址:https://www.cnblogs.com/ameile/p/5589808.html  asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务 本实例接收 字符串类型值 : 客户端发送过来的数据类型都是字符串,不能为二进制流(折衷方式可base64编码成字符串). import os import re import sys import time import json i…
Crontab简crontab是一个可以根据时间.日期.月份.星期的组合调度对重复任务的执行的守护进程.也可以讲Linux crontab是用来定期执行程序的命令. 当安装完成操作系统之后,默认便会启动此任务调度命令. crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作. 注意: 新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行. crontab安装 1.查看是否安装 rpm -qa | grep cr…
网络socket输入操作分为两个阶段:等待网络数据到达和将到达内核的数据复制到应用进程缓冲区.对这两个阶段不同的处理方式将网络IO分为不同的模型:IO阻塞模型.非阻塞模型.多路复用和异步IO. 一 阻塞模型 阻塞模型原理如下图1.1,当进行系统调用recvfrom时,应用进程进入内核态,内核判断是否已收到数据报,若没有则阻塞直到数据报准备好,接着复制数据到应用进程缓冲区,然后函数返回. 图1.1 阻塞IO模型 阻塞模型缺点:若数据报未准备好,则线程阻塞,不能进行其它操作和网络连接请求. 利用多进…
/** * 非阻塞IO多线线程服务端 * 当一个任务进入多线程,这个任务线程需要处理接收信息.发送信息.因而发生I/O阻塞问题 * 利用selector可以实现异步 * */ public class EchoServer02 { //轮询器,处理IO阻塞问题 private Selector selector = null; private ServerSocketChannel serverSocketChannel = null; ; private Charset charset = C…
1.前言 以前使用 websocket来实现双向通信,如今深入了解了 NIO 同步非阻塞io模型 , 优势是 处理效率很高,吞吐量巨大,能很快处理大文件,不仅可以 做 文件io操作, 还可以做socket通信 .收发UDP包.Pipe线程单向数据连接. 这一篇随笔专门讲解 NIO socket通信具体操作 注意:这是重点!!! 兴趣集合有4个事件, 分别是: SelectionKey.OP_ACCEPT [接收连接就绪,专用于服务端] SelectionKey.OP_CONNECT [连接就绪…
代码 # coding:utf- from socket import * # .创建服务器socket sock = socket(AF_INET, SOCK_STREAM) # .绑定主机和端口 addr = () # sock.bind(addr) # . 设置最大监听数目,并发 sock.listen() # . 设置成非阻塞 sock.setblocking(False) # 保存客户端socket clientAddrList = [] # print(sock.) : try: c…
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对.当c端一个异步过程调用发出后,调…
转自http://www.cnblogs.com/yuxingfirst/archive/2013/03/08/2950281.html 我们知道,linux下socket编程有常见的几个系统调用: 对于服务器来说, 有socket(), bind(),listen(), accept(),read(),write() 对于客户端来说,有socket(),connect() 这里主要要讲的是客户端这边的connect函数. 对于客户端来说,需要打开一个套接字,然后与对端服务器连接,例如: int…
服务端的代码 import socket import queue import select ip_bind = ("127.0.0.1",9000) message_queue = {} #保存客户端发送过来的信息,将消息放入到队列中 input_list = [] output_list = [] if __name__ == '__main__': server = socket.socket() server.bind(ip_bind) server.listen(10) s…
对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听.此时服务器socket允许客户端进行连接,backlog提示没被accept的客户连接请求队列的大小,系统决定实际的值,最大值定义为SOMAXCONN在头文件<sys/so…
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622548.html 锲子:关于并发服务器中的I/O复用实现方式,前面在网络编程系列四还是五来着????我们讲过select的方式,但select的性能比较低,当连接数量超过几百个的时候就很慢了,并不适合以Web服务器端开发为主流的现代开发环境.因此就有了Linux下的epoll,BSD的kqueue,Solaris的/dev/poll和Windows的IOCP等复用技术.本章就来讲讲Lin…
  IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file descriptor(fd,文件描述符).而对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符).描述符就是一个数字,指向内核中一个结构体(文件路径,数据区,等一些属性).那么我们的应用程序对文件的读写就通过对描述符的读写完成. linux将内存分为内核区,用户区…
一.事件驱动 1.要理解事件驱动和程序,就需要与非事件驱动的程序进行比较.实际上,现代的程序大多是事件驱动的,比如多线程的程序,肯定是事件驱动的.早期则存在许多非事件驱动的程序,这样的程序,在需要等待某个条件触发时,会不断地检查这个条件,直到条件满足,这是很浪费cpu时间的.而事件驱动的程序,则有机会释放cpu从而进入睡眠态(注意是有机会,当然程序也可自行决定不释放cpu),当事件触发时被操作系统唤醒,这样就能更加有效地使用cpu. 2.再说什么是事件驱动的程序.一个典型的事件驱动的程序,就是一…
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念: 阻塞IO:: socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会 返回. 非阻塞IO:: 非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方 式来判断具体操作是否成功.(对于connect,accpet操作,通过select判断, 对于recv,recvfrom,send,sendto通过返回值+错误码来判断) I…
server #include <stdio.h> #include <winsock2.h> #include <iostream> #pragma comment(lib, "WS2_32.lib") #define PORT 9999 #define DATA_BUFSIZE 8192 typedef struct _SOCKET_INFORMATION{ CHAR Buffer[DATA_BUFSIZE]; //发送和接收数据的缓冲区 WSA…
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只 是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就 是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞 ,函数不能立即返回).可是使用Select就可以完成非阻塞(所谓非阻塞方式non- block,就是进程或线 程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,…
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念: 阻塞IO:: socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会 返回. 非阻塞IO:: 非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方 式来判断具体操作是否成功. IO模式设置: SOCKET       对于一个socket 是阻塞模式还是非阻塞模式有两种方式来处理:: 方法1.fcntl 设置;用F_GE…
相关资料 IO基本概念 Linux环境 同步异步阻塞非阻塞 同步与异步 阻塞与非阻塞 IO模型Reference Link 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动异步IO模型 异步IO模型 总结 AIOBIONIO Java对BIONIOAIO的支持 AIOReference Link1ReferenceLink2 NIOReference Link epollselectpollReference Link LTETepoll select的几大缺点 poll实现 epollre…
初始化socket socket是一种系统资源,并不是每次初始化都一定成功,因此为了避免初始化失败,一般使用多次初始化的方式,如下所示: unsigned int times = 0x0; while((server = socket(PF_INET6, SOCK_STREAM, )) < && times < 0x3) { times++; printf("create socket faild %d times\n", times); } 设置socke…
概念理解 一.与I/O相关的五个重要概念 1. 第一个概念:用户空间与内核空间 1. 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方) 2. 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限. 3. 为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分:一部分为内核空间,一部分为用户空间 4. 针对linux操作系统而言,将最高的1G字节(从…
刚开始学习,难免有些疏漏之处,请各位多多指教. 程序亲测可以使用.废话不多说. 网络IO模型分为阻塞IO.非阻塞IO.异步IO.IO复用.信号驱动IO. 阻塞IO: 有数据时,直接读:没有数据时,等待读. 非阻塞IO: 无论内核有没有数据都读. 以下是程序: 1. serevr.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include &…
关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的:我打个很简单的比方,如果你调用socket send函数时: 如果是阻塞模式下: send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR:如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么…