使用CSocket连接到服务器程序

时间:2012-03-23 09:26:56

标签: c++ sockets mfc

我已经创建了这个简单的示例程序,但这不起作用。它不会连接。知道为什么吗?

#include <stdio.h>
#include <afxsock.h>

void main()
{
    int lalala;
    CSocket mySocket;
    printf("%d\n", mySocket.Create());
    CString ipAddress = _T("127.0.0.1");
    lalala = mySocket.Connect(ipAddress, 3015);
    printf("%d", lalala);
    getchar();
}

我已经有一个监听端口3015的程序

2 个答案:

答案 0 :(得分:0)

您是否使用AfxSocketInit()初始化了套接字?如果在创建套接字之前没有调用它

答案 1 :(得分:0)

Connect()需要两个参数地址和数据长度。地址是struct sockaddr_in,它作为SOCKADDR传递给该方法。数据的长度为sizeof(SOCKADDR)。

我不确定为什么互联网上的大多数示例都使用诸如Connect(ipaddress,port)之类的东西,也许就是另一个SDK。

这对我来说很重要

if (AfxSocketInit() == FALSE) {
    AfxMessageBox(_T("Failed to init sockets"));

    return _T("");
}

CSocket socket;
if (!socket.Create()) {
    AfxMessageBox(_T("Failed to create socket"));

    return _T("");
}

SOCKADDR *sockaddr;

struct sockaddr_in remote_addr;


port = (u_short)(port);

// remote address
memset(&remote_addr, 0, sizeof(remote_addr));
remote_addr.sin_family = AF_INET;
remote_addr.sin_port = htons(port);
inet_pton(AF_INET, "127.0.0.1", (&remote_addr.sin_addr));

sockaddr = (SOCKADDR *)&(remote_addr);
if (!socket.Connect(sockaddr, sizeof(SOCKADDR))) {
    AfxMessageBox(_T("Failed to connect to server, 127.0.0.1 9000"));