- 博客(22)
- 收藏
- 关注
原创 UDP实现组播
最近在做一个局域网 多机互传文本数据,原先用TCP 但是麻烦重重,两主机间一一建立连接,释放连接,开销太大。最后决定用UDP组播,先发送目标文件的大小,再分段发送文件,接收后回传确认信息给发送端。效果还不错,想继续改进使用UDT协议,完成可靠的UDP传输。
2012-10-17 15:44:04
1050
转载 加入一个组播组
网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据报,那么这么主机必须先加入该组播组,然后就可以从组地址接收数据包。在广域网中,还涉及到路由器支持组播路由等,但本文希望以一个最为简单的例子解释清楚协议栈关于组播的一个最为简单明了的工作过程,甚至,我们不希望涉及到IGMP包。我们先从一个组播客户端的应用程序入手来解析组播的工作过程:#include #includ
2012-09-25 16:58:30
929
转载 setsockopt参数详细说明
int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口 IPPROTO_IP: IPv4套接口 IPPROTO_IPV6: IPv6
2012-08-31 14:01:58
502
原创 static声明
今天接触到一种静态变量累加的方法一般的局部变量在函数调用结束后,会自动释放存储单元,变量的生命周期结束。使用static关键字声明静态变量后,在调用函数中某个局部变量以后,该变量的值不消失,并且可以保持原值不变。静态局部变量是在编译时赋初始值,并且只赋一次初值,在以后每次调用函数时,都不在重新为其赋值,而是使用上一次函数被调用结束时变量的值。void text(){stat
2012-08-29 15:18:12
500
转载 sockaddr_in , sockaddr , in_addr的区别
1. struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。sa_data是14
2012-08-29 10:56:30
543
转载 time_t和struct tm类型的相互转换
使用gmtime函数或localtime函数将time_t类型的时间日期转换为struct tm类型:使用time函数返回的是一个long值,该值对用户的意义不大,一般不能根据其值确定具体的年、月、日等数据。gmtime函数可以方便的对time_t类型数据进行转换,将其转换为tm结构的数据方便数据阅读。gmtime函数的原型如下:struct tm *gmtime(time_t *
2012-08-22 17:12:19
1510
转载 添加一个多组播
应用程序通过命令字IP_ADD_MEMBERSHIP把一个socket加入到一个多播组,IP_ADD_MEMBERSHIP是一个IP层的命令字,其调用使用的参数是结构体struct ip_mreq,其定义如下:struct ip_mreq{struct in_addr imr_multiaddr;struct in_addr imr_interface;};该结构体的两个成
2012-08-17 15:16:12
988
转载 TCP/IP组播编程
TCP/IP下的组播编程基础 本文讨论基于TCP/IP下的组播编程基础。所有的例子都可以Windows下台运行。本文不会涉及到组播协议的实现,只是讨论组播编程需要的环境及API函数。关于组播的实现和需要的协议笔者将会另写文章讨论。组播描述 组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多
2012-08-17 11:06:06
1218
转载 FILETIME 结构
最近在做关于数据同步更新的编程,就接触到了FILETIME 这个结构 FILETIME 结构表示自 1601 年 1 月 1 日以来的 100 纳秒为间隔数。结构包含组合在一起形成一个 64 位值的两个 32 位值。 typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime;
2012-08-15 14:12:31
3726
转载 lpFindFileData
lpFindFileData WIN32_FIND_DATA,这个结构用于装载与找到的文件有关的信息。该结构可用于后续的搜索 结构说明: WIN32_FIND_DATA STRUCT dwFileAttributes DWORD ? ;文件属性 ftCreationTime FILETIME ftLastAccessTime FILET
2012-08-06 19:01:41
577
转载 fscanf函数
下面介绍一个例子, 运行后产后一个test.dat的文件。 例: #include main() { char *s="That's good news"); /*定义字符串指针并初始化*/ int i=617; /*定义整型变量并初始化*/ FILE *fp; /*定义文件指针*/ fp=fopne("test.dat", "w"); /*建立一个文字文件只写*/
2012-08-06 11:00:34
589
转载 PVOID指针
P表示指针,那么PVOID表示void * 无类型指针所有指针都是一个32位二进制数(32位系统下),这个意义上说所有指针都是一样的,它们的大小一样,用于指向内存中的某处地址,然而指针为什么要有类型之分呢?答案是指针偏移。例如p为一个指针,它指向内存某处地址,那么p+1(或者写p[1])是什么意思呢?答案是p指向地址的后面那个地址,那么后面多少呢?这就看指针类型了,假如它是字符指针,那么就
2012-08-02 19:45:19
478
转载 getchar()函数 & EOF
大师级经典的著作,要字斟句酌的去读,去理解。最近在看K&R的The C Programming Language(Second Edition),当然,为了提高阅读的速度,还是选择中文版,并且,翻译的还是相当不错的。看到1.5节的字符输入/输出,再次的被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,感觉很有必要总结一下,不然,很
2012-08-02 19:09:40
381
转载 CreateFile用法和例子
函数原型: HANDLE CreateFile( LPCTSTR lpFileName, //指向文件名的指针 DWORD dwDesiredAccess, //访问模式(写/读) DWORD dwShareMode, //共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针 DWO
2012-08-02 10:03:29
844
转载 数据结构WSADATA
TWSAData = packed record wVersion: Word; wHighVersion: Word; szDescription: array[0..WSADESCRIPTION_LEN] of Char; szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char; iMaxSock
2012-08-01 20:07:20
650
原创 CreateThread函数
CreateThread函数从一个进程里面创建一个线程。这个开始的线程必须指定开始执行代码的地址,新线程执行。有代表性的,开始地址就是一个函数名。这个函数有一个参数,并且返回一个DWORD值。一个进程里面同时有多个线程在执行。HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //
2012-08-01 14:57:27
1016
原创 sockaddr
sockaddr是Linux网络编程的地址结构体一种,其定义如下: struct sockaddr { unsignedshort sa_family; /* address family */ |char sa_data[14]; /* up to 14 bytes of direct address */};
2012-07-31 20:18:50
2143
原创 c_str()函数
函数声明:const char *c_str(); c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如
2012-07-31 19:06:58
318
原创 函数inet_addr和inet_ntoa
inet_addr 将"数字+句点"的格式的IP地址转换到unsigned long中,返回值已经是按照网络字节顺序的相反inet_ntoa把类型为struct in_addr的数据转化为"数字+句点"的形式的字符串typedef u_int32_t in_addr_t;struct in_addr{in_addr_t s_addr;};本机字节顺序与网络字节顺序的
2012-07-31 09:57:49
466
原创 recv函数
The Windows Sockets recv function receives data from a connected socket.int recv (SOCKET s, char FAR* buf, int len,int flags );Parameters 参数s [in] A descriptor identifying a connected
2012-07-30 21:01:05
1333
原创 句柄与指针的不同
句柄对应的对象往往都处于系统的内核,并可以被所有进程共享,如果直接给你一个指针,结果就是被不懂的人把系统整崩溃,被别有用心的高手拿来做坏事情。 指针给你的权限太大,你往里面胡乱地整一通,结果就是影响到所有的进程,可能还包括系统低层的服务等等。 handler的又一个名字我们可以叫“伪指针”,看起来象指针,但不是真实的指针,你可以用这个做任何事情,但是只有正确的事情才
2012-07-30 18:17:32
282
原创 select函数
select()的机制中提供一fd_set的数据结构,实际上是一long类型的数组, 每一个数组元素都能与一打开的文件句柄(不管是Socket句柄,还是其他 文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成, 当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执 行了select()的进程哪一Socket或文件可读。select()函数原型:int s
2012-07-30 14:41:19
379
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人