windows網路編程Winsock(二)一個簡單的阻塞伺服器

來源:互聯網
上載者:User

下面是一個簡單阻塞模式的伺服器,是一個單對單的伺服器如果你想實現多用戶端的伺服器那就要用到其他的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;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.