首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于winsock的有关问题

2012-03-16 
关于winsock的问题写了个简单的tcpserver,dev-cpp下无法生成.exe,麻烦大家指点迷津//InitSock.h#include

关于winsock的问题
写了个简单的tcp   server,dev-cpp下无法生成.exe,麻烦大家指点迷津
//InitSock.h
#include <winsock2.h>
#pragma   comment(lib, "WS2_32 ")
class   CInitSock     //初始化winsock
{
  public:
    CInitSock(BYTE   minorVer=2,BYTE   majorVer=2)
    {
      WSADATA   wsaData;
      WORD   sockVersion=MAKEWORD(minorVer,majorVer);
      if(::WSAStartup(sockVersion,&wsaData)!=0)   //WSAStartup   fill   wsaData
          exit(0);
      }

      ~CInitSock()
      {   ::WSACleanup();}
};

//TcpServer.cpp
#include "InitSock.h "
#include <iostream>
using   namespace   std;

CInitSock   initSock;
                                     
int   main()
{
  SOCKET   sListen=socket(AF_INET,SOCK_STREAM,0);//   create   sListen
  if(sListen=INVALID_SOCKET)
    {
        cout < < "Failed   socket()! " < <endl;
        return   0;
    }

  sockaddr_in   sin;   //fill   sin
  sin.sin_family=AF_INET;
  sin.sin_port=htons(4567);
  sin.sin_addr.S_un.S_addr=INADDR_ANY;

  if(::bind(sListen,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)   //bind
    {  
        cout < < "Failed   bind()! " < <endl;
        return   0;
    }

    if(::listen(sListen,2)==SOCKET_ERROR)     //listen
      {
          cout < < "Failed   listen()! " < <endl;
          return   0;
        }

      sockaddr_in   remoteAddr;
      int   nAddrLen=sizeof(remoteAddr);
      SOCKET   sClient;
      char   szText[]= "TCP   Server   Demo!\n ";

      while(TRUE)                     //循环接受连接
      {
          sClient=::accept(sListen,(SOCKADDR*)&remoteAddr,&nAddrLen);
          if(sClient=INVALID_SOCKET)
            {
                cout < < "Failed   accept()! " < <endl;
                return   0;
            }
            cout < < "Receive   an   access:   " < <inet_ntoa(remoteAddr.sin_addr) < <endl;
            ::send(sClient,szText,sizeof(szText),0);
            ::closesocket(sClient);
        }

      ::closesocket(sListen);
      return   0;
}

控制台下
D:\SOFTWA~1\SOURCE~1\design> g++   *.cpp
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccAzaaaa.o(.text+0x145):TcpServer.cpp:   undefined   reference   to   `socket@12 '


C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccAzaaaa.o(.text$_ZN9CInitSockD1Ev[CInitSock::~CInitSock()]+0x7):TcpServer.cpp:   undefined   reference   to   `WSACleanup@0 '
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccAzaaaa.o(.text$_ZN9CInitSockC1Ehh[CInitSock::CInitSock(unsigned   char,   unsigned   char)]+0x3f):TcpServer.cpp:   undefined   reference   to   `WSAStartup@8 '
collect2:   ld   returned   1   exit   status

[解决办法]
g++ *.cpp -lwsock32
[解决办法]
在一个工程里吗?那就在 Project Options 对话框的 Parameters 的 Linker 里加上“-lws2_32”。

否则是单一文件的话,在 Complie Options 对话框中 Compiler 页中的“Add the following commands when calling compiler: ”一栏里加上“-lws2_32”,记得还要勾上啊。

热点排行