随笔分类 - Socket
摘要:当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如:对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重复很多次才能真正收完这逻辑上的一整个消息。对方发来了5条2个字符的消息,本地的buffer(大小1024字节)会将这5条消息全部收入囊下...那么,如何处理呢?下面我以最简单的一种文本消息来demo根据上面所描述的情况,最重要的关键落在了下面3个因素的处理上消息的结尾标记接收消息时判断结尾标记当本次buffer中没有结尾标记时怎么处理我把写好的核心算法贴出来: StringBuilder sb = new S...
阅读全文
摘要:在这篇文章中,EventBus实现 - 发布订阅 - XML加载所适用的范围只是本机的事件传播,要是牵涉到多台服务器之间的事件传播就不行了,解决办法有用msmq解决的,Node.js解决的,也有用redis的发布订阅解决的,这次用C# socket来实现,能实现立刻推送事件到所有订阅了相关event的server上。这次的子系统适用的场景如下:主要分2个部分:各个server使用的Event Bus Broker以及Event Bus Server。Broker与Server之间的通信协议就3个:ME、Subscribe、Publish。分别代表:我的名字是、我要订阅的事件是、我触发事件。Ev
阅读全文
摘要:先上一些多线程需要使用的函数定义:DWORD WINAPI ProcessClientRequests(LPVOID lpParam) //新线程将会执行的函数定义{ return 0;}HANDLE handler=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, NULL); //这里比较简单,&clientsocket是个指针,是从主线程传入新线程的参数WaitForMultipleObjects(MAXCLIENTS, threads, TRUE, INFINITE); //用来阻塞主线程,直.
阅读全文
摘要:前段时间写了个C# Socket初探,这次再写个C语言的Socket博文,运行效果如下:实现步骤:1. Server端#include //用于printf等函数的调用#include //Socket的函数调用 #pragma comment (lib, "ws2_32") //C语言引用其他类库时,除了.h文件外,还要加入对应的lib文件(这个不同于C#)int main(){ WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOC...
阅读全文
摘要:写了个简易版的ftp(服务器和客户端),运行效果如下图:click download下载中的UI:原理:模仿正规ftp方式,分成2个socket连接:文本命令socket、数据信道socket。牵涉到的知识点:线程通过invoke 委托的方式调用主界面的控件程序结束时的子线程遍历终止多线程之间的阻塞、同步socket传输命令的异步方式操作实现了如下功能:列举服务器主目录中的所有文件下载文件到客户端(支持大文件)实现起来比较容易,代码在这里下载。
阅读全文
摘要:闲着无聊,写了个简单的C/S Socket程序,功能很简单,服务器在9000端口监听socket接入,只要有接入,就发送"Welcome."消息给客户端。代码分2块,server端:class Program { static void Main(string[] args) { TcpListener lsner = new TcpListener(9000); lsner.Start(); Console.WriteLine("started in port: 9000"); ...
阅读全文