首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - Visual C++ 阅读:3298   评论: 0    参与评论
标题   Windows网络编程     选择自 shaoxiaoning 的 Blog
关键字   Windows网络编程
出处  

我把Windows网络编程里的例子封装到一类里,这样方便初学者使用
初学者在继续深入后可以扩展这个类,另外做成lib , 或者  DLL也不错
其实这并没有别的功能
只是让初学者明白这就是一个最基本的 基于TCP连接的服务端程序了
就像 Windows的基本框架一样,  有了这个 你就可以继续深入的学习
某个协议的 函数,然后不断的丰富这个框架
另初学者迷惑的是  一个网络 程序究竟是如何实现的
一个网络程序  目前最广泛应用的无非 是 基于TCP/IP协议的应用
而IPX在网络游戏上也 很广泛,还有P2P,    等
在初学阶段,像网上的许多文章说的,应该对ISO/OSI有一个整体的认识
然后联系一下  某层 和 平时用的网络程序究竟有哪些联系
比如QQ 就是典型的利用UDP实现的消息发送功能,但也许一个程序并不仅仅是
采用一种协议实现的,往往是多种协议复合而成的。
到这里,就可以找来一本入门的教材来学习了,其实教材网络上有很多
没有必要花钱买
BOOL bRecvOnly=FALSE;
DWORD WINAPI ClientThread(LPVOID lpParam)
{
 SOCKET        sock=(SOCKET)lpParam;
 char          szBuff[4096];
 int           ret,nLeft,idx;
 while(1){
   ret = recv(sock, szBuff,4096, 0);
   if (ret == 0)
   break;
   szBuff[ret] = '\0';
   if (!bRecvOnly)
   {
    nLeft = ret;
    idx = 0;
    while(nLeft > 0)
    {
  ret = send(sock, &szBuff[idx], nLeft, 0);
  if (ret == 0)
    break;
  nLeft -= ret;
  idx += ret;
 }
   }
 }
 return 0;
}
class DxCustomTCP
{
 int port; //port
public:
  DxCustomTCP();
  ~DxCustomTCP();
  void DxInitCreateTCP(); 
};
//构造函数-constract func
DxCustomTCP::DxCustomTCP()
{
  port=3496;//Initlize port
}
//析构函数-unconstract func
DxCustomTCP::~DxCustomTCP()
{
}
//初始化TCP连接-Init TCP Connect
void DxCustomTCP::DxInitCreateTCP()
{
  WSADATA       wsd;
  SOCKET        sListen,sClient;
  int           iAddrSize;
  HANDLE        hThread=NULL;
  DWORD         dwThreadId=NULL;
  struct sockaddr_in local,client;

  WSAStartup(MAKEWORD(2,2), &wsd);
  //UDP: AF_INET,SOCK_DGRAM  IPPROTO_UDP
  sListen = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
  local.sin_addr.s_addr = htonl(INADDR_ANY);
  local.sin_family = AF_INET;
  local.sin_port = htons(port);
  bind(sListen, (struct sockaddr *)&local,sizeof(local));
  listen(sListen, 8);
  while (1)
  {
    iAddrSize = sizeof(client);
    sClient = accept(sListen, (struct sockaddr *)&client,&iAddrSize);
    hThread = CreateThread(NULL, 0, ClientThread,(LPVOID)sClient, 0, &dwThreadId);
    CloseHandle(hThread);
  }
  closesocket(sListen);
  WSACleanup();
}
使用时注意 #include <winsock2.h>和  加入 ws2_32.lib
至于调用 在主程序一调用就可以了
运行程序后
在cmd.exe下运行netstat -an    可以看到tcp的连接
其中 3496就监听的端口号,好了祝大家好运!


相关文章
对该文的评论