中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
windows网络编程Winsock(二)一个简单的阻塞服务器
作者:未知 时间:2005-07-27 23:30 出处:CSDN 责编:chinaitpower
              摘要:windows网络编程Winsock(二)一个简单的阻塞服务器

下面是一个简单阻塞模式的服务器,是一个单对单的服务器如果你想实现多客户端的服务器那就要用到其他的i/o模型了以后再说了!

#include <cstdlib>
#include <iostream>
#include <Winsock2.h>

#pragma comment(lib,"libws2_32.lib")
//缓冲区大小
#define DATA_BUFSIZE 4096
using namespace std;
const unsigned int nPort = 5151;
int main(int argc, char *argv[])
{
  WSADATA wsaData;
  SOCKET  Listen;
  SOCKET  Accept;
  char Buffer[DATA_BUFSIZE];
  //初始化Winsock版本2.2
  int ret = WSAStartup(MAKEWORD(2,2),&wsaData);
 if(ret != 0)
 {
        //注意:因为Winsock没有加载,所以我们不能使用WSAGetLastError
  //来确定导致故障的特定错误。我们只能根据返回状态判断
  cout<<"WSAStartup failed with error "<<ret<<endl;
  WSACleanup();
  return 0;
  }
  //这里就是我们创建socket要连接或者监听代码了
 Listen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 //设置服务器的SOCKADDR_IN
 SOCKADDR_IN ServerDdr;
 ServerDdr.sin_family = AF_INET;
 ServerDdr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
 ServerDdr.sin_port = htons(nPort);
 
 //绑定监听socket
 int nRet = bind(Listen,(LPSOCKADDR)&ServerDdr,sizeof(ServerDdr));
 if(nRet == SOCKET_ERROR)
 {
  cout<<"bind error!"<<endl;
  closesocket(Listen);
  goto ERROR1;
 }
 //接受 ,最后连个参数可以为NULL,例如
 //Accept = accept(Listen,NULL,NULL);
 //如果你想要获取客户端的ip就要像下面
 SOCKADDR_IN AcceptAddr;
 int AcceptAddrLen;
 Accept = accept(Listen,(LPSOCKADDR)&AcceptAddr,&AcceptAddrLen);
 //打印客户端的ip和端口号
 cout<<"ip address:"<<inet_ntoa(AcceptAddr.sin_addr)<<endl;
 cout<<"Port is:"<<ntohs(AcceptAddr.sin_port)<<endl;
 nRet = 0;
 while(1)
 {
      //接收数据
      nRet = recv(Accept,Buffer,DATA_BUFSIZE,0);
      if(nRet == SOCKET_ERROR )
      {
      cout<<"recv error!"<<endl;
      closesocket(Accept);
      closesocket(Listen);
      goto ERROR1;
    }
 }
 closesocket(Accept);
 closesocket(Listen);
ERROR1:
 //如果程序结束调用 WSACleanup
 WSACleanup();
    system("PAUSE");
    return EXIT_SUCCESS;
}


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有