照着书上的例子写了个简单的聊天工具, 用socket连接就失败了, 大家帮我看看SOCKET m_socket;
//在InitInstance()里
WSADATA wsd;
int error = WSAStartup( MAKEWORD(2,2), &wsd );
if( error != 0 )
{
AfxMessageBox("初始失败");
return FALSE;
}
if( LOBYTE( wsd.wVersion ) != 2 || 
    HIBYTE( wsd.wVersion ) != 2)
{
AfxMessageBox("版本有误!");
WSACleanup();
return FALSE;
}
//在OnInitDialog()里
m_socket = socket( AF_INET, SOCK_STREAM,0 );//连接按纽响应函数OnConn()
UpdateData( TRUE );
sockaddr_in serveraddr;
serveraddr.sin_family  = AF_INET;
serveraddr.sin_port    = htons( m_Serverprot ); //取得端口(我填123,不太理解端口的意义)--UINT类型Edit变量
serveraddr.sin_addr.S_un.S_addr = inet_addr( m_Serverip );//取得IP(我填本机的IP) --CString类型Edit变量
if(connect(m_socket, (sockaddr *)&serveraddr, sizeof(serveraddr))!=0)
{
AfxMessageBox("连接失败");
return;
}else
AfxMessageBox("连接成功");连接失败-- 初学SOCKET不清楚哪里出错了,希望大家给点意见.. 

解决方案 »

  1.   

    serveraddr.sin_addr.S_un.S_addr = inet_addr( m_Serverip );//取得IP(我填本机的IP) --CString类型Edit变量
    不知你填的端口和本机地址iP是怎么填的 本机IP为127.0.0.1端口一般写个6000客服端和服务端要一样端口
      

  2.   


    IP    192.168.105.77
    PROT  123
    这样填的
      

  3.   

    利用TCP/IP实现远程通信,第一需要服务器的IP地址,来确定服务器;第二需要把客户端的数据送到那个应用程序接收,也就是说的端口号。有了IP地址在加上端口号,才能准确定位服务器的程序。
    比如,你客户端程序要连接127.0.0.1地址,端口号是6060,则服务器上必须有一个监听6060端口的程序,才能建立连接。
      

  4.   

    端口要换成1024以上的。
    另外,你那是不是是不是不支持2.2版本的套接字库啊
    将你的套接字库版本放低试试,换成1.1版本的
    int error = WSAStartup( MAKEWORD(1,1), &wsd );
    if( error != 0 )
    {
        AfxMessageBox("初始失败");
        return FALSE;
    }
    if( LOBYTE( wsd.wVersion ) != 1 || 
        HIBYTE( wsd.wVersion ) != 1)
    {
        AfxMessageBox("版本有误!");
        WSACleanup();
        return FALSE;
    }
      

  5.   

    你可以这样来做:程序初始化时调用WSAStartup,创建一个socket,用bind绑定ADDR_ANY地址和自己选择的任意一个端口(端口号大一些,不要与其它程序冲突),然后调用listen,之后创建一个线程,返回后执行accept;在线程中创建一个socket,然后用connect连接127.0.0.1和前面指定的端口。
      

  6.   

    1。换个大端口
    2。命令行下netstat -a,看你的端口是否是listening,确定服务器是否启动成功
      

  7.   

    端口号要在1024以外
    另外,你那可能不支持套接字库2.2版本,改为1.1版本的试试看
    先运行服务器,在运行客户端int error = WSAStartup( MAKEWORD(1,1), &wsd );
    if( error != 0 )
    {
        AfxMessageBox("初始失败");
        return FALSE;
    }
    if( LOBYTE( wsd.wVersion ) != 1 || 
        HIBYTE( wsd.wVersion ) != 1)
    {
        AfxMessageBox("版本有误!");
        WSACleanup();
        return FALSE;
    }
      

  8.   

    端口号一致,比如:端口号都是7777
    一定要先运行服务器端,再运行客户端,我也是刚学的,但我的运行成功!
    下面的是客户端:#include "Winsock2.h"
    #include "stdio.h"void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData);
    if(err != 0)
    {
    return;
    } if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
    {
    WSACleanup();
    return;
    } SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv;
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(5000);
    addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));        char recvBuf[100];
    memset(recvBuf,0,sizeof(recvBuf));
    recv(sockClient,recvBuf,100,0);
    printf("%s\n",recvBuf); char sendBuf[100];
    memset(sendBuf,0,sizeof(sendBuf));
    sprintf(sendBuf,"我是张帅帅!");
    send(sockClient,sendBuf,strlen(sendBuf),0); closesocket(sockClient);
    WSACleanup();
    }
      

  9.   

    服务器:#include "Winsock2.h"
    #include "stdio.h"void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;        wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData);
            if(err != 0)
    {
    return;
    } if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
    {
            WSACleanup();
    return;
    } SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv;
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(5000);
    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); bind(sockSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));
    listen(sockSrv,5);        SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR); while(1)
    {
    SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);                char sendBuf[100];
    memset(sendBuf,0,sizeof(sendBuf));
                    sprintf(sendBuf,"欢迎%s来到勇哥聊天室!",inet_ntoa(addrClient.sin_addr));
    send(sockConn,sendBuf,strlen(sendBuf),0); char recvBuf[100];
    memset(recvBuf,0,sizeof(recvBuf));
    recv(sockConn,recvBuf,100,0);
    printf("%s\n",recvBuf); closesocket(sockConn);
    }
    }
      

  10.   

    你是用的VC么?我用的VC.
    另外,还得加入win32.dll
      

  11.   

    你可以这样:新建一个win32 控制台应用程序。选择一个空工程。增加一个c++源文件:名字自己取。服务器端代码:#include <Winsock2.h>
    #include <stdio.h>void main() //服务器端
    {
    //步骤1.加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
     
    wVersionRequested = MAKEWORD( 1,1 ); //1.1版本 
    err = WSAStartup( wVersionRequested, &wsaData ); //加载套接字库(功能1:加载套接字库,功能2:进行套接字库版本协商)
    //协商结果放在wsaData中
    if ( err != 0 ) {
    return;

    if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 ) {
    WSACleanup( ); //清除资源
    return; 
    } //步骤2:建立socket
    SOCKET sockServer = socket(AF_INET,SOCK_DGRAM,0); // //步骤3:bind
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(5000); // bind(sockServer,(sockaddr*)&addrSrv,sizeof(sockaddr));

    //步骤4:接收数据
    char recvBuff[100];
    SOCKADDR_IN addClient;
    int len = sizeof(SOCKADDR);
    recvfrom(sockServer,recvBuff,100,0,(SOCKADDR*)&addClient,&len);
    printf("%s\n",recvBuff);

    //步骤5:释放资源
    closesocket(sockServer);
    WSACleanup();
    }客户端代码:在增加一个c++源文件:名字自己取。#include <Winsock2.h>
    #include <stdio.h>void main() //客户端
    {
    //步骤1.加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
     
    wVersionRequested = MAKEWORD( 1,1 ); //1.1版本 
    err = WSAStartup( wVersionRequested, &wsaData ); //加载套接字库(功能1:加载套接字库,功能2:进行套接字库版本协商)
    //协商结果放在wsaData中
    if ( err != 0 ) {
    return;

    if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 ) {
    WSACleanup( ); //清除资源
    return; 
    } //步骤2:创建socket
    SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0); //步骤3:发送数据
    SOCKADDR_IN addServer;
    addServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    addServer.sin_family=AF_INET;
    addServer.sin_port=htons(5000); sendto(sockClient,"Hello",strlen("Hello")+1,0,(SOCKADDR*)&addServer,sizeof(SOCKADDR));

    //步骤4:释放资源
    closesocket(sockClient);
    WSACleanup();
    }
    服务器端要先启动,客户端后启动。
    另外需要在project-settings-link中的Object/library module的输入框的最后增加ws2_32.lib
      

  12.   

    服务器端和客户端分别建2个win32控制台程序项目,每个项目都增加一个c++源文件,把上面的代码贴过去,在每个项目,需要在project-settings-link中的Object/library module的输入框的最后增加ws2_32.lib