网络
迪迦 • 奥特曼
C/C++ coder
展开
-
websocket报文格式及掩码处理方式
1、数据帧格式概览下面给出了WebSocket数据帧的统一格式。熟悉TCP/IP协议的同学对这样的图应该不陌生。从左到右,单位是比特。比如FIN、RSV1各占据1比特,opcode占据4比特。内容包括了标识、操作代码、掩码、数据、数据长度等。(下一小节会展开) 0 1 2 3 ...转载 2020-01-06 20:27:37 · 2297 阅读 · 0 评论 -
网络传输----结构体还是序列化?
虽然,网络编程里面的数据传送推荐用序列化,但我不用,还是选择结构体(返璞归真),有以下几点理由:1.跨平台问题:序列化确实可以很好的跨语言平台,可大多数网络游戏不需要跨语言平台2.别以为有了序列化就不需要结构体表面上序列化代码量小,按顺序读和写char int short LPCSTR … 就好,逻辑对象写不写都无所谓,那就是大错而特错了 待序列化的对象发送前的结构还是不可省转载 2018-02-04 15:31:42 · 2026 阅读 · 0 评论 -
socket编程五种模型—主讲原理,代码较少
客户端:创建套接字,连接服务器,然后不停的发送和接收数据。 比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套接字和一个辅助线程。以后该客户端和服务器的交互都在这个辅助线程内完成。这种方法比较直观,程序非常简单而且可移植性好,但是不能利用平台相关的特性。例如,如果连接数增多的时候(成千上万的连接),...转载 2018-02-28 17:46:06 · 3221 阅读 · 0 评论 -
Socket编程5种模型——以代码说明一切,hhhhh
我会以一个回应反射式服务器(与《Windows网络编程》第八章一样)来介绍这五种I/O模型。我们假设客户端的代码如下(为代码直观,省去所有错误检查,以下同): #include <WINSOCK2.H>#include <stdio.h>#define SERVER_ADDRESS "137.117.2.148"#define PORT ...转载 2018-02-28 21:30:27 · 554 阅读 · 0 评论 -
关闭Socket的正确方式及ECONNRESET,WSAECONNRESET产生的原因
ECONNRESET是linux环境网络编程产生的错误,错误码为104,WSAECONNRESET是windows环境网络编程产生的错误,错误码为10054两者产生的原因都一样,分以下几种情况: - 接收端recv或者read, 对端已经关闭连接,recv/read返回该错误 - 对端重启连接,还未建立连接 - 发送端已经断开连接,但是调用send会触发这个错误 第二点第三点都...转载 2018-02-28 22:05:39 · 11283 阅读 · 0 评论 -
为什么叫做重叠端口?
其实这个标题有点“标题党”的味道,为了大家搜索方便我故意冠以IOCP编程之名,其实重叠IO编程并不一定需要IOCP,而IOCP编程就一定需要重叠IO。是不是已经被这句话给绕晕了?总之是为了更好的应用IOCP,所以要理解重叠IO。这篇文章的核心就是讨论重叠IO的来龙去脉。在很久很久以前,在用C语言写DOS程序的年代,就有了很完整的IO标准库支撑,printf输出字符到屏幕,fopen,fwrit...转载 2018-03-20 14:12:50 · 674 阅读 · 0 评论 -
Socket 连接简易编程
客户端:#include <iostream>#include <winsock2.h>using namespace std;#pragma comment (lib, "ws2_32.lib")#define PORT 4000#define IP_ADDRESS "127.0.0.1"int main(int agrc, char * agrv[]){ WSADATA ws;转载 2017-03-11 11:05:07 · 280 阅读 · 0 评论 -
libcurl curl_easy_setopt常用参数
CURLOPT_URL设置访问URLCURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA回调函数原型:size_t function( void *ptr, size_t size, size_t nmemb, void *stream); 函数将在libcurl接收到数据后被调用,因此函数多做数据保存的功能,如处理下载文件。CURLOPT_WRITEDAT...原创 2019-01-15 22:57:25 · 1787 阅读 · 0 评论 -
socket编程-优雅的断开连接shutdown
调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种“生硬”的方式有时候会显得不太“优雅”。上图演示了两台正在进行双向通信的主机。主机A发送完数据后,单方面调用 close()/closesocket() 断开连接,之后主机A、B都不能再接受对方传输的数据。实际上,是完全无法调用与数据收发有关的函数。一般情况下这不会有问题,但有些特殊时...转载 2019-04-24 08:30:17 · 677 阅读 · 0 评论