分享

WinSocket的单线程Server的实现

 独孤求财 2012-03-21

WinSocket的单线程Server的实现

时间:2011-6-2来源:yang 作者: peng点击: 161次
#include <iostream>
#include "winsock2.h"
#include <windows.h>
 
using namespace std;
 
int main(){
     //启动WS2_32.dll
     WSADATA wsaData;
     int nResult = WSAStartup(MAKEWORD(2,2),&wsaData);
     if(nResult != NO_ERROR){
         cout << "Error at WSAStartup" << endl;
         return 1;
     }
 
     //创建一个socket
     SOCKET m_socket;
     m_socket = socket(AF_INET, //协议族
         SOCK_STREAM,           //SOCKET类型
         IPPROTO_TCP);          //此socket使用的协议
     if(m_socket == INVALID_SOCKET){
         cout << "Error at socket " << WSAGetLastError() << endl;
         WSACleanup();
         return 1;
     }
 
     //Bind a socket
     sockaddr_in service;
     service.sin_family = AF_INET;//协议族
     service.sin_addr.s_addr = inet_addr("127.0.0.1");//IP地址
     service.sin_port = htons(27002);               //端口号
 
     //将socket与指定的地址绑定
     if(bind(m_socket,(SOCKADDR*)&service,sizeof(service)) == SOCKET_ERROR){
         cout << "Error at bind " << endl;
         closesocket(m_socket);
         return 1;
     }
 
     //监听socket
     if(listen(m_socket,20) == SOCKET_ERROR){
         cout << "Error on listen" << endl;
          return 1;
     }
 
     //接受一个socket连接
     SOCKET AcceptSocket;
     cout << "Waiting for client to connect" << endl;
     while (1) {
         AcceptSocket = SOCKET_ERROR;
         while (AcceptSocket == SOCKET_ERROR) {
              AcceptSocket = accept(m_socket,NULL,NULL);
         }
 
         cout << "client connected!" << endl;
         m_socket = AcceptSocket;
         break;
     }
 
     int nSendBytes = 0;
     int nRecvBytes = 0;
     char pSendBytes[32] = "Server:Send data";
     char pRecvBytes[32] = "";
 
     //从socket接收数据.
     nRecvBytes = recv(m_socket,pRecvBytes,32,0);
     cout << "Num of receive :" << nRecvBytes << endl;
     cout << pRecvBytes << endl;
 
     //向socket发送数据。
     nSendBytes = send(m_socket,pSendBytes,32,0);
     if (nSendBytes == SOCKET_ERROR) {
         int nErr = WSAGetLastError();
         WSAEACCES;
         cout << nErr << endl;
     }else
        cout <<"Num of send : " << nSendBytes << endl;
     //清除WS2_32.dll
     Sleep(5000);
     WSACleanup();
   
     return 0;
}
 
.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约