// Server.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include "iostream"
#include "winsock2.h"#pragma comment(lib,"ws2_32.lib")using namespace std;int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
SOCKET m_sock,m_accsock;
wVersionRequested=MAKEWORD(2,2);
if (0!=WSAStartup(wVersionRequested,&wsaData))
{
cout<<"加载套接字失败......"<<endl;
return 0;
}
m_sock=socket(AF_INET,SOCK_STREAM,0);
if(m_sock==INVALID_SOCKET)
{
cout<<"创建套接字失败......"<<endl;
return 0;
} sockaddr_in m_seraddr;
m_seraddr.sin_family=AF_INET;
m_seraddr.sin_port=htons(6789);
m_seraddr.sin_addr.s_addr=inet_addr(INADDR_ANY);
int errbind=bind(m_sock,(sockaddr*) &m_seraddr,sizeof(m_seraddr));
if(errbind==SOCKET_ERROR)
{
cout<<"绑定套接字失败......."<<endl;
closesocket(m_sock);
WSACleanup();
return 0;
} if (listen(m_sock,5)==SOCKET_ERROR)              //SOMAXCONN为最大监听数:5
{
cout<<"监听失败......."<<endl;
closesocket(m_sock);
WSACleanup();
return 0;
}

sockaddr_in m_accaddr;
int m_accaddrlen= sizeof(m_accaddr);

m_accsock=accept(m_sock,(sockaddr*)&m_accaddr,&m_accaddrlen);
if (m_accsock==INVALID_SOCKET)
{
cout<<"接收失败......"<<endl;
closesocket(m_accsock);
closesocket(m_sock);
WSACleanup();
return 0;
}
cout<<"有客户端登陆......"<<endl; if(0>=send(m_accsock,"欢迎登陆......",sizeof("欢迎登陆......"),0))
{
cout<<"发送消息失败......."<<endl;
} char buffer[256]={0};
while (1)
{
if (SOCKET_ERROR==recv(m_accsock,buffer,sizeof(buffer),0))
{
cout<<"接收消息失败......"<<endl;
Sleep(50);
continue;
}
else
{
cout<<"请输入要发送的消息......"<<endl;
char sendbuffer[256]={0};
cin>>sendbuffer;
if(0>=send(m_accsock,sendbuffer,sizeof(sendbuffer),0))
{
cout<<"发送消息失败......."<<endl;
}
}
} return 0;
}在 int errbind=bind(m_sock,(sockaddr*) &m_seraddr,sizeof(m_seraddr));
这里,errbind怎么会是-1,错在哪 里,导至了绑定失败?

解决方案 »

  1.   

    在cmd运行 netstat -ano 看看,端口是不是已被占用了。
      

  2.   

    怎么把 那个 INADDR_ANY 换成本机的IP就好了?为什么?跟win7还是vc2010有关?
      

  3.   

    //这句有问题  m_seraddr.sin_addr.s_addr=inet_addr(INADDR_ANY);改为 m_seraddr.sin_addr.s_addr=INADDR_ANY;因为INADDR_ANY 等于 0 不需要
    用inet_addr函数来转换,不知在vs2010里怎么没报错,居然通过编译了?