行云

行至水穷处,坐看云起时。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一页 1 2 3 4 5 6 7 ··· 12 下一页

2013年1月9日

摘要: 头文件: 调试开关在头文件中#ifndef __DEBUG_ZWY_H__#define __DEBUG_ZWY_H__#include <stdio.h>#include <stdarg.h>#define _DBG_#define _DBG_LEVEL_INFO_//define _DBG_ to open debug#ifdef _DBG_ #ifdef _DBG_LEVEL_INFO_ /* 如果定义了调试级别为INFO, 那么同时打开WARN, ERR开关*/ #ifndef _DBG_LEVEL_WARN_ #define _DBG_... 阅读全文
posted @ 2013-01-09 21:59 windflying 阅读(1291) 评论(0) 推荐(0) 编辑

2013年1月1日

摘要: UDP C/S编程的步骤如下图所示与TCP C/S通信的区别在于:服务端没有设置监听和等待连接的过程。客户端没有连接服务端的过程。基于UDP的通信时不可靠地,面向无连接的,发送的数据无法确切知道对方收到没有,就算对方根本不存在,也可以发送数据出去。这样的通信通常用在对可靠性、安全性要求不高的地方,比如语音通信(没听清楚可以让对方再说一遍)。下面是一个简单的例子:server#include <sys/types.h>#include <sys/socket.h>#include<pthread.h>#include <netinet/in.h># 阅读全文
posted @ 2013-01-01 22:38 windflying 阅读(31351) 评论(0) 推荐(2) 编辑

摘要: ● 互斥锁互斥锁用来保证同一时间内只有一个线程在执行某段代码(临界区)。多线程编程最容易出问题的地方,就是临界区的界定和访问控制。下面是一个生产者,消费者的简单例子。生产者、消费者公用一个缓冲区,这里假定缓冲区只能存放一条消息。#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <sys/time.h>static char buff[50];int have_msg=0;pthread_mutex_t mutex;int delay=1;void consumeIt 阅读全文
posted @ 2013-01-01 16:18 windflying 阅读(8113) 评论(0) 推荐(0) 编辑

摘要: ● 概述Linux下进行多线程编程,要包含头文件<pthread.h>,编译时要连接pthread库(-lpthread)。例如:gcc –o test test.c –lpthread一篇讲的很全的文章:http://www.cnblogs.com/BiffoLee/archive/2011/11/18/2254540.html●线程的创建创建线程的函数是pthread_create。若创建线程成功则返回0,否则返回错误编号。原型:pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (start 阅读全文
posted @ 2013-01-01 15:07 windflying 阅读(956) 评论(0) 推荐(0) 编辑

2012年12月31日

摘要: 我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。通过原始套接字,我们可以抓取所有发送到本机的IP包(包括IP头和TCP/UDP/ICMP包头),也可以抓取所有本机收到的帧(包括数据链路层协议头)。普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以。利用原始套接字,我们可以自己构造IP头。有两种原始套接字一种是处理IP层即其上的数据,通过指定socket第一个参数为AF_INET来创建这种套接 阅读全文
posted @ 2012-12-31 18:19 windflying 阅读(17454) 评论(0) 推荐(1) 编辑

2012年12月28日

摘要: ☛广播包的概念广播包通常为了如下两个原因使用:1 一个应用程序希望在本地网络中找到一个资源,而应用程序对于该资源的地址又没有任何先验的知识。 2 一些重要的功能,例如路由要求把它们的信息发送给所有找到的邻机。被广播信息的目的地址取决于这一信息将在何种网络上广播。Internet域中支持一个速记地址用于广播-INADDR_BROADCAST。由于使用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口。广播通信是无连接的通信,通信前不需要建立连接。不需要listen和accept,但需要绑定一个socket用来接收广播。☛广播包的发送创建socket设置socket, 阅读全文
posted @ 2012-12-28 17:52 windflying 阅读(3683) 评论(0) 推荐(0) 编辑

2012年12月25日

摘要: 利用winsock编写网络应用程序服务端的步骤简述如下WSAStartup 初始化网络编程库 socket 创建套接字 bind 指定地址、端口,绑定套接字 listen 进入监听状态 accept 等待接收新连接 send/recv 收发数据 closesocket 关键套接字 WSAStartup 释放对动态库的使用 下面详细介绍各API 1. Winsock初始化 调用int WSASta... 阅读全文
posted @ 2012-12-25 20:33 windflying 阅读(365) 评论(0) 推荐(0) 编辑

2012年12月24日

摘要: ● 字节序的定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题)。在大部分的开发中我们不需要考虑字节序的问题。唯有在跨平台以及网络程序应用中字节序才是一个应该被考虑的问题。● 网络应用的字节序网络字节序是TCP/IP规定好的一种数据表示格式,它与具体的CPU类型、操作系统无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节顺序采用big endian排序方式。在网络编程时,并不是什么时候都要考虑字节序问题。那么什么时候需要考虑呢?Intel CPU使用的都是little endian。实际上如果是应用层的数据,即 阅读全文
posted @ 2012-12-24 12:51 windflying 阅读(5769) 评论(0) 推荐(0) 编辑

2012年12月23日

摘要: Windows网络编程使用winsock。Winsock是一个基于Socket模型的API,在Windows系统中广泛使用。使用Winsock进行网络编程需要包含头文件Winsock2.h,需要使用库ws2_32.lib,包含方法:可以使用语句来告诉编译器连接该库#pragma comment(lib, “ws2_32.lib”);如果使用VS,可以通过“项目” --> “XX属性”--> “连接... 阅读全文
posted @ 2012-12-23 21:24 windflying 阅读(3537) 评论(0) 推荐(0) 编辑

摘要: 当进程结束后所有线程都终止。多线程编程最大的问题在于共享数据的访问控制。直接用Win32 API进行编程有很多优点:基于Win32的应用程序执行代码小,运行效率高。但是它要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源。▶创建线程HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, // thread fu... 阅读全文
posted @ 2012-12-23 15:56 windflying 阅读(7409) 评论(1) 推荐(1) 编辑

上一页 1 2 3 4 5 6 7 ··· 12 下一页