Socket编程
文章平均质量分 64
_acme_
这个作者很懒,什么都没留下…
展开
-
Socket编程服务端原理简单介绍
socket中文翻译是套接字,但是这样并不好理解,还是把它比喻为多人通话好一点. socket中的服务器:如果只有两人通话的时候,其实不能叫做服务器,直接叫对讲机好了,就是我们互相连接,然后你发信息给我,我再发信息给你.这也是最简单的一种socket编程.如果想像QQ群那样群聊,就需要一个”真正”的服务器了,因为这时候你需要一个中转站来把客户端发来的消息都分发给各个客户端.它的头文件和库是:Win原创 2016-04-03 20:25:16 · 1543 阅读 · 0 评论 -
重叠I/O完成例程模型如何同时投递WSARecv和WSASend
参考自这篇文章: http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancediomethod5g.html 推荐大家去上面看看,讲得很细致,一步一步都很详细。因为都是英文的,所以坚持吧~下面重点就解释一下其原理,是通过什么方式来使一个完成例程同时处理WSARecv和WSASend的。首先我们原创 2016-11-28 21:59:07 · 2846 阅读 · 6 评论 -
socket非阻塞模式服务器设计与实现
阻塞和非阻塞的区别就是一个阻塞等待,一个直接返回,并返回一些有意义的错误代码。跳转到代码思路如下: 1.初始化套接字2.创建套接字3.设置socket为非阻塞模式int ioctlsocket( SOCKET s, //要设置的套接字 long cmd, //FIONBIO u_long FAR* argp //非零值);注: 关于第二第三个参数,MSDN是这样解释的原创 2016-11-14 20:04:56 · 2109 阅读 · 2 评论 -
socket select模型服务器设计
select函数原型:int select( int nfds, //该参数忽略,设为0 fd_set FAR* readfds, //可读套接字集合 fd_set FAR* writefds, //可写套接字集合 fd_set FAR* exceptfds,//检查错误套接字集合 const struct timeval FAR* timeout //原创 2016-11-18 23:00:45 · 1536 阅读 · 0 评论 -
基于select模型的多人聊天程序(C++)
原理参考该博文: http://blog.csdn.net/qq_18297675/article/details/53224494该程序采用select模型设计(只是服务器采用),服务器端只有四个线程。 1.接受请求线程 2.接收数据线程 3.发送数据线程 4.管理client状态线程优势显而易见,只用了四个线程,不用给每个client开辟一个新的线程管理。select模型的核心就是“轮原创 2016-11-18 23:20:03 · 3141 阅读 · 0 评论 -
WSAAsyncSelect模型例子
WSAAsyncSelect模型非常简单好用,因为它是基于windows窗口消息机制的,所以可以像其它消息处理一样来处理socket。使用该模型的步骤如下:1.定义一个消息#define WM_SOCKET WM_USER+0x10 //自定义socket消息要保证自定义消息大于WM_USER,否则可能会冲突2.使用WSAAsyncSelect注册WM_SOCKET消息,并选择感兴趣的网络事件原创 2016-11-19 17:10:37 · 2096 阅读 · 0 评论 -
WSAEventSelect模型例子
WSAEventSelect模型和WSAAsyncSelect模型 相同点: 1.都是由系统通知应用程序处理网络事件 2.都是异步的 不同点:通知机制不一样,WSAAsyncSelect模型是以windows的消息机制来通知应用程序的。WSAEventSelect模型是以事件形式通知的。所以一个需要窗口,一个则不需要。建立WSAEventSelect模型步骤:1.为server socket原创 2016-11-19 22:54:18 · 4597 阅读 · 0 评论 -
重叠I/O之事件通知
使用重叠I/O之事件通知模型步骤如下:一、打开服务器(包括初始化、创建socket、绑定、监听)其中创建socket的时候可以使用WSASocket,也可以简单的使用socket,因为socket默认已经加上了WSA_FLAG_OVERLAPPED这个标志。二、创建ThreadAccept线程这个线程主要是用来不断的接受client的请求,并为每一个成功连接到server的client创建一个事件对原创 2016-11-28 13:16:17 · 903 阅读 · 0 评论 -
完成端口模型
完成端口实际上是一个通知队列,当某项I/O操作完成时,由操作系统向完成端口发送通知包。该通知包包含的信息有传输的字节数、完成键和重叠结构。点击跳转至示例代码实现完成端口模型的基本步骤:1.创建完成端口调用CreateIoCompletionPort函数来创建完成端口对象,其原型如下:HANDLE WINAPI CreateIoCompletionPort( _In_ HANDLE Fi原创 2016-12-25 11:43:12 · 1014 阅读 · 0 评论 -
重叠I/O之完成例程
这个模型中有两个函数可以交换着用,那就是WSAWaitForMultipleEvents()和SleepEx()函数,前者需要一个事件驱动,后者则不需要。是不是听起来后者比较厉害,当然不是,简单肯定是拿某种性能换来的,那就是当多client同时发出请求的时候,SleepEx如果等候时间设置成比较大的话,会造成client连接不上的现象。具体可以运行一下示例代码体会一下。 示例代码1(WSAWait原创 2016-11-28 21:36:33 · 2886 阅读 · 0 评论 -
Socket多人聊天MFC版
源码下载地址: https://github.com/coderxj/Socket-Group-Chat 包括前面C语言版的1V1 和 多人聊天源码都有。coding 环境:VS2015 WIN10测试环境:VM虚拟机–>XP系统、2003server和主机WIN10语言:C++,类库MFC功能:基于服务器转发消息的多人聊天。主要原理:server给每个连上的client都创建一个线程单独管理,原创 2016-10-31 20:50:43 · 8153 阅读 · 12 评论 -
关于使用UDP实现多人聊天程序的Thinking
有一句话叫做想法是美好的,现实却是残酷的,说得真对啊~。本来天真的以为UDP写的比TCP写的会更简单,效率更高。但是经过实践发现,其复杂度远远超过TCP写的程序。总结如下:1.C-C聊天没问题,逻辑简单,代码量少,效率高,少了三路握手,包重传和检验。2.C-S-C(1V1的时候)聊天问题就开始来了,首先,因为没有accept,所以server不会保存有client的套接字,唯一能识别不同client原创 2016-10-18 14:31:03 · 4626 阅读 · 3 评论 -
Socket编程客户端原理简单介绍
和服务端原理差不多,只是少了两个步骤.客户端: 初始化套接字(WSAStartup)->创建套接字(socket)->连接服务器(connect)->发送/接收数据(send/recv)->关闭连接(closesocket,WSACleanup)1.初始化套接字,也是获取套接字. WSADATA是一个存放套接字信息的结构 利用WSAStartup函数来获取套接字信息并且存放到WSADATA原创 2016-04-03 20:39:02 · 952 阅读 · 0 评论 -
Socket编程-1V1聊天
提供一个1V1聊天的小例子供大家参考.直接贴代码,废话不多说. 注:在VS2015代码测试成功,其它编译器如有问题自行解决.先来一张效果图: 服务端:#include <WinSock2.h>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")int main(){ //存放套接字信息的结构 WSADATA wsaData原创 2016-04-03 21:36:51 · 9248 阅读 · 9 评论 -
socket编程UDP服务器原理简介
UDP全名是:User Datagram Protocol 用户数据报协议 这是一种面向无连接的协议。只要服务端绑定了服务器地址,就可以等待接收数据,或者发送数据了。 UDP: 1.提供无连接服务。客户端向服务端发送数据时不必先建立连接。客户端创建一个套接字并向服务器发送一个数据报,然后客户端可以立即用这个套接字向另外一个服务器发送其它数据 2.不能确保UDP数据报最终到达目的地。UDP对接原创 2016-04-09 18:55:59 · 1970 阅读 · 0 评论 -
socket编程UDP客户端原理简介
UDP客户端的创建就很简单,直接创建一个套接字就可以发送/接收数据了。步骤: 初始化套接字(WSAStartup)–>创建UDP客户端套接字(socket)–>发送/接收数据(sendto,recvfrom)–>关闭客户端,清理(closesocket,WSACleanup)1.初始化套接字 方法和服务端一样2.创建UDP客户端套接字 和服务端一样3.发送/接收数据 在发送数据或者接收数据的原创 2016-04-09 19:13:54 · 974 阅读 · 0 评论 -
socket编程UDP小例子
注:代码在VS2015测试正常 服务器代码如下:#include <stdio.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")int main(void){ WSADATA wsaData = { 0 }; //套接字信息结构 SOCKET ServerSocket = INVALID_SOCKET; /原创 2016-04-09 19:28:36 · 3290 阅读 · 2 评论 -
IP地址、子网掩码、网络号、主机号、网络地址、主机地址
IP地址:4段十进制,共32位二进制,如:192.168.1.1 二进制就是:11000000|10101000|00000001|00000001子网掩码可以看出有多少位是网络号,有多少位是主机号: 255.255.255.0 二进制是:11111111 11111111 11111111 00000000网络号24位,即全是1 主机号8位,即全是0129.168.1.1 /24 这个、24就是告转载 2016-04-20 19:18:46 · 3408 阅读 · 0 评论 -
socket多人聊天程序C语言版(一)
socket编程client和server直接通信是很简单的,就是一个发送一个接收就完了,但这却是基础。如果还不是很了解的话请参考这两篇文章。 socket1V1聊天小程序(TCP): http://blog.csdn.net/qq_18297675/article/details/51052189 socket1V1聊天小程序(UDP): http://blog.csdn.net/qq_1原创 2016-10-14 23:37:38 · 29970 阅读 · 31 评论 -
socket多人聊天程序C语言版(二)
1V1实现了,1V多也就容易了。不过相对于1V1的程序,我经过大改,采用链表来动态管理。这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了。用C语言写这个还是挺费时间的,因为什么功能函数都要自己写,不像C++有STL库可以用,MFC写就更简单了,接下来我还会更新MFC版本的多人聊天程序。好了,废话少说,进入主题。这个程序要解决的问题如下: 1.CPU使用率飙升问题 –>用链表原创 2016-10-15 22:38:35 · 23611 阅读 · 31 评论 -
深入浅出JAVA BIO、NIO和AIO(附详细代码实例)
1.深入浅出之BIO 1.1 简单代码示例 1.2 BIO相关概念 1.3 一张图理解BIO 1.4 Q&A 2.深入浅出之NIO 2.1 简单代码示例 2.2 NIO相关概念 2.3 一张图理解NIO 2.4 Q&A 3.深入浅出之AIO 3.1 简单代码示例 3.2 AIO相关概念 3.3 一张图理解AIO 3.4 Q&A ...原创 2019-09-12 00:08:20 · 3943 阅读 · 3 评论