我的服务器代码有什么问题(c ++)

时间:2013-12-28 17:44:25

标签: c++ client

我差不多完成了这个服务器的制作但是在我完成它之前我想测试它,但是当我这样做时,在任何人连接它之前继续说“已达到连接”。我希望它说,当有人真正连接到它时,“已达到连接”。有什么帮助吗?

#pragma comment(lib, "Ws2_32.lib")
#include<iostream>
#include<WinSock2.h>

using namespace std;

int main()
{

   WSAData wsa;

   int iresult =WSAStartup(MAKEWORD(2,1), &wsa);

   SOCKADDR_IN Server;

   Server.sin_addr.s_addr=inet_addr("127.0.0.1");

   Server.sin_family = AF_INET;

   Server.sin_port = 6667;

   SOCKET Listen =(AF_INET,SOCK_STREAM,NULL);

   listen (Listen, SOMAXCONN);

   bind(Listen,(SOCKADDR*)&Server,sizeof(Server));

   SOCKET Connect =(AF_INET,SOCK_STREAM,NULL);

   int size = sizeof(Server);

   std::cout<<"Waiting for connections";

   for(;;)
   {
    if(Connect=accept(Listen,(SOCKADDR*)&Server,&size)) {
        std::cout<<"connection was reached";
        break;
        }
    }


  WSACleanup();

  cin.get();

  return 0;
}

1 个答案:

答案 0 :(得分:2)

这里有一个问题:

Server.sin_port = 6667;

端口号必须是网络字节顺序,这与通用x86平台的字节顺序相反。而是做

Server.sin_port = htons(6667);

您的代码还存在许多其他问题,例如Joachim Isaksson在评论中指出的问题。

还有:

if(Connect=accept(Listen,(SOCKADDR*)&Server,&size))

您必须记住accept在出错时返回SOCKET_ERROR(或-1),这是“真实的”