- 博客(20)
- 资源 (19)
- 收藏
- 关注
原创 send函数的阻塞测试实验
本文中, 我们讨论阻塞socket的send函数, 很多时候, 我们看到send总是立即返回, 貌似看不到阻塞的send. 有的朋友可能因此以为此时的send函数是非阻塞的。 其实, 它函数阻塞的。 下面, 我们来看看一个小实验。 服务端的程序为:#include #include // winsock接口#pragma comment(lib, "ws2_32.lib"
2015-02-13 00:37:36 8853
原创 如何获取/设置socket对应的内核缓冲区(发送,接收)的大小
前面我们讲过内核缓冲区和应用程序缓冲区, 在本文中, 我们仅仅讨论内核缓冲区, 下面, 我们来看程序:#include #include #pragma comment(lib, "ws2_32.lib")int main(){ WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(1, 1)
2015-02-13 00:06:55 25279 6
原创 服务端的通信socket号与客户端的通信socket号一致吗?---不一致
本文不阐述什么大问题, 仅仅做一个简单的验证:服务端的通信socket号与客户端的通信socket号不一致 下面, 我们看服务端程序:#include #include // winsock接口#pragma comment(lib, "ws2_32.lib") // winsock实现int main(){ WORD wVersionRequested; /
2015-02-11 23:05:54 11785 1
原创 send和recv只是内核缓冲区和应用程序缓冲区之间的搬运工---严格来讲send和recv并不具备发送和接收功能
谈到网络socket编程, 我们不得不提两个基本也很重要的函数:send和recv. 对socket编程理解不深的童鞋容易产生这样一个错误的认识: send函数是用来发送数据, 而recv函数是用来接收数据的, 其实, 这种观点是稍微有点偏颇的, 掩盖了本质。 下面, 我们看一幅图, 了解一下send和recv函数所处的位置(这幅图是我在网上找的, 不太清晰, 请凑合看一下):
2015-02-11 22:07:59 15090 8
原创 负数补码和负数本身进行转换的一个好方法---解答一网友的疑问
我们先来看这位网友的问题: ~123的返回值就为-124? 先将123转成二进制数01111011,然后各位取反得10000100,最后得-124。为什么答案是-124? 我确实有点实证主义了, 还是用代码来验证一下(为了简便起见, 我们仅仅考虑8位):#include int main(){ char a = 123; char b =
2015-02-11 22:02:09 10962
原创 今天参加了球友会的k歌聚餐活动, 好开心!
作为一名软件开发工作者, 尤其是在我司, 平时很少有空余时间, 即使偶尔闲暇, 也经常是宅在家里玩代码, 偶尔抽空去打球。 今天参加了球友会的k歌聚餐活动, 好开心, 很少K歌, 快两年没K过歌了吧,以后要多参加这类活动, 多认识一些朋友, 他们每个人身上都有好多闪光点啊 感谢组织和参与活动的同事们, 成功组织一次活动也是很不容易的。 帅哥美女都很能唱很能侃啊(当然涛哥我也侃得
2015-02-08 23:34:16 8525
原创 局域网内mac地址冲突导致设备网络出现异常状况
前些天, 遇到这样一个古怪的问题: 我的pc与某设备S1进行通信, 结果出现网络频繁断掉的异常情况, 我能基本保证, 我所在的局域网是没有问题的。 而且, 我发现S1设备在另外一个局域网内与别的pc通信, 不会出现网络异常。 这个现象要是让测试MM知道, 说不定要提个概率性问题单呢。 遇到这类古怪的问题, 我慢慢有些经验了, 最重要第一步不是去分析具体代码原因, 而是第一步就要判
2015-02-08 22:38:34 26838 11
原创 Windows上如何玩非阻塞的connect?---让程序员自定义connect函数的超时时间
我们知道, 对于阻塞的socket而言, connect函数也是阻塞的, 我在Windows上测试过, 对于阻塞的socket而言, connect的阻塞时间约为25s(linux上是75s吧, 各个平台都不一样). 也就是说, 很多时候, 客户端需要等25s才继续往下执行。 我们想象一下, 用户肯定会不满意啊, 得罪了用户, 那就糟糕了。 那能不能搞个自己设置超时时间的connect函数呢? 完全可以! 在本文中, 我们来学习一下非阻塞connect函数的实现---让程序员自定义connect函数的超时
2015-02-08 01:01:17 14527 4
原创 基于非阻塞socket的多线程服务器的实现------一个服务器如何与多个客户端进行通信?
我们首先来看服务端(涉及非阻塞socket和多线程):#include #include #include #pragma comment(lib, "ws2_32.lib")#define BUF_SIZE 100sockaddr_in addrClient; // 为了让通信线程获取ip// 通信线程DWORD WINAPI CommThread(LPVOID
2015-02-07 00:34:03 12463 1
原创 我以前总是错误地以为---“阻塞socket和非阻塞socket对应的connect函数都会立即返回”
我以前总是错误地以为---“阻塞socket和非阻塞socket对应的connect函数都会立即返回”, 为什么会有这个错觉呢? 是基于以下两个测试:
2015-02-05 23:58:03 11078 1
原创 服务端用非阻塞socket<--->客户端用阻塞socket
之前, 我们简要第了解了一下非阻塞的socket。 在本文中, 我们让服务端用非阻塞socket, 客户端依然用我们熟悉的阻塞的socket. 服务端程序如下(非阻塞的socket):#include #include #include #pragma comment(lib, "ws2_32.lib") int main(){ // 网络初始化
2015-02-05 23:08:32 10725 1
原创 初步感受一下非阻塞的socket
我们先来看一个阻塞的socket程序:#include #include #pragma comment(lib, "ws2_32.lib") int main(){ // 网络初始化 WSADATA wsd; WSAStartup(MAKEWORD(2,2), &wsd); SOCKET sServer = socket(AF_INET,SOC
2015-02-05 22:43:38 10716
原创 再谈ip地址的获取
之前用其他简单方法获取过ip地址, 下面我们尝试用另外的方法获取。 如果你编译出现错误, 请在我的博客资源中下载对应的头文件和库。 直接上菜:#include #include #include // 如果没有这个, 请在我的博客资源中下载#pragma comment(lib, "iphlpapi.lib") #pragma comment(lib, "ws2_3
2015-02-04 23:25:23 7770 2
原创 如何获取网卡的数目?---利用GetNumberOfInterfaces
下面, 我们来看看如何获取网卡数目。 如果你在编译的时候出现问题, 请到我的博客资源中下载对应的文件和库。 简单的一碟菜如下:#include #include #include // 如果没有这个, 请在我的博客资源中下载#pragma comment(lib, "iphlpapi.lib") int main(){ unsigned long nu
2015-02-04 23:00:44 8173 8
原创 如何获取DNS Server的地址?---利用GetNetworkParams
我们可以通过ipconfig /all命令来获取pc的dns server, 下面, 我们用代码来获取。 如果你编译有问题, 请到网上或者我的博客资源中下载对应的头文件和库。 上菜:#include #include #include // 如果没有这个, 请在我的博客资源中下载#pragma comment(lib, "iphlpapi.lib") int ma
2015-02-04 22:44:02 11240 2
原创 如何获取网卡相关信息(包括mac, ip, mask, gateway等)?---利用GetAdaptersInfo
本文中, 我们来看看如何利用GetAdaptersInfo获取与网卡相关的一些信息。 如果你在运行的时候缺头文件或者库, 请到网上下载, 也可以直接在我的博客资源中下载, 免积分。其实, 这个函数中的Adapter就是指网卡。 好, 上代码(为了简便,不考虑各种异常):#include #include #include // 如果没有这个, 请在我的博客资源中下载#pragm
2015-02-03 22:40:23 8279 1
原创 利用setsockopt设置套接字某属性的属性值
之前学习了getsockopt, 现在自然有了setsockopt, 来看看吧:#include #include #pragma comment(lib,"ws2_32.lib") int main(){ WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); unsigned int serverSocket = s
2015-02-03 21:18:13 8456 4
原创 利用getsockopt获取套接字某属性的属性值
利用getsockopt可以获取套接字某属性的属性值, 本文, 我们来窥见一斑。 多的不说, 肚子饿了, 直接上菜:#include #include #pragma comment(lib,"ws2_32.lib") int main(){ WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); unsigned in
2015-02-03 21:02:42 10789 1
原创 自己写个ping程序玩玩---附带抓包
ping功能很常用, 在Windows/Linux上, 我们经常用ping功能来探测对方是否在线。 那么, ping到底是怎么实现的呢? 在本文中, 我们自己来写一个ping, 当然, 功能肯定没有Windows/Linux自带的ping那么强大。 但是, 自己写写, 可以理解更深刻。 说明, 为了简便起见, 程序中的众多异常, 我就不考虑了, 只聚焦主要功能。
2015-02-01 18:59:44 12296 2
原创 聊聊C语言中的位段(位域)
我们知道, 在C中, char占据8的位, 你可以这么理解: 一个厕所有8个坑位, 刚好组成一个char. 在32位机器上, 一个int占领32个坑位, 一眼望去, 就是32个坑, 何其壮观。 如果有人蹲在其中, 表示1, 如果没有人蹲在其中, 表示0. 有时候, 需要用一个变量表示“开/关”状态, 说白了, 也就是0和1. 如果用int, 那其余的31个坑位不是被浪费了么?
2015-02-01 16:18:31 7881 4
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人