void MySocket::MyConnect()
{
sockaddr_in addr; sSocket = socket(AF_INET, SOCK_STREAM, 0); if(sSocket==INVALID_SOCKET)
{
AfxMessageBox("创建Socket错误 !");
return;
} addr.sin_family = AF_INET;
addr.sin_port = htons(cTcpDlg->m_port);
addr.sin_addr.S_un.S_un_b.s_b1 = b1;
addr.sin_addr.S_un.S_un_b.s_b2 = b2;
addr.sin_addr.S_un.S_un_b.s_b3 = b3;
addr.sin_addr.S_un.S_un_b.s_b4 = b4; int iRet = connect(sSocket, (sockaddr*)&addr, sizeof(addr));

if(iRet==SOCKET_ERROR)
{
AfxMessageBox("连接错误 1 !");
return;
} BYTE byRet;
recv(sSocket, (char*)&byRet, 1, 0);
if(byRet)
{
closesocket(sSocket);
AfxMessageBox("连接错误 2 !");
return;
}
}

解决方案 »

  1.   

    MySocket派生自CSocket,我调用时sSocket = socket(AF_INET, SOCK_STREAM, 0);提示出错。
      

  2.   

    什么呢,你用的到底是mfc class 还上api ,用类的话是 object.create(..)
      

  3.   

    >>> 编译的时候不提示错误啊!If compiler is that smart, you can just hire elementary school student to write computer programs.
      

  4.   

    但是我执行的时候的时候告诉我sSocket = socket(AF_INET, SOCK_STREAM, 0);这一行有错误。
    用了函数WSAStartup 也没有用啊,到这一行还是有错误。
    大家谁能告诉我,tcp编程的时候操作系统和vc编译器都需要做那些配置吗?
      

  5.   

    应该用socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);吧
    好像protocol参数传递0是给红外传输用的
      

  6.   

    头文件要包含
    #include <winsock2.h>
      

  7.   

    你是不是重复创建了socket啊?
      

  8.   

    如果用api的话,试试
    Project->Setting->Link里有个Object/Library Modules,加ws2_32.lib
      

  9.   

    如果你使用的是CSocket,那么请参照下面的程序:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;185728
      

  10.   

    程序初始化时要用WSAStartup,退出时用WSACleanup
      

  11.   

    拜托,你就不能用getlasterror看看不就知道原因了吗,掌握方法最重要
      

  12.   

    api 的化,就用WSAStartup,WSACleanup 包括头文件#include <winsock2.h>
    如果用了mfc 就用afxsocketinit  包括头文件#include <afxsock.h>
      

  13.   

    是不是没有初始化啊?WSAStartup
      

  14.   

    SOCKET socket(
      int af,
      int type,
      int protocol
    );The protocol parameter is always set to 0 for IrDA.
      

  15.   

    编译可以通过的话,你需要看看WSAStartup()函数执行是否成功?因为你既用了mfc class ,也用了api,怀疑你的SOCKET版本有冲突,导致 WSAStartup()执行失败,你可以检查一下它的返回值。