2016-09-27 81 views
2

我在这里相当新,我试图测试自己的套接字程序。创建套接字C++

如何创建套接字?这是我想要做的:

int main(int argc, char *argv[]) { 
    int socket_addr; 
    struct sockaddr_in server; 
    char message[100], server_message[100]; 

    // Creates the socket 
    socket_addr = socket(AF_INET, SOCK_STREAM, 0); 
    if (socket_addr == -1) { 
     cout << "Could not create the socket!"; 
    } else { 
    //... 
    } 
} 

编辑:这两个链接帮助了很多了解套接字。请看看他们:

1) http://beej.us/guide/bgnet/ 
2) https://msdn.microsoft.com/en-us/library/windows/desktop/ms742213(v=vs.85).aspx 
+1

的问题是有点含糊,尝试寻找在这里:http://beej.us/guide/bgnet/ – Charlie

+0

@Charlie,谢谢! :D – Johnson

+0

你的代码有什么问题?什么是错误(如果发生错误)?你期望的行为是什么,你会得到哪一个? – Garf365

回答

0

既然你说你是在Windows和我假设你显示的代码是完整的代码它不工作的原因是因为没有呼叫WSAStartup已尚未作出,这个函数初始化网络库,并应任何网络操作之前​​被调用(如创建一个套接字):

//your includes here.. 

#pragma comment(lib, "ws2_32.lib") // link with the network library 

int main(int argc, char *argv[]) { 
    int socket_addr; 
    struct sockaddr_in server; 
    char message[100], server_message[100]; 

    int wsaRes = 0; 
    WSADATA wsaData = {0}; 
    wsaRes = WSAStartup(MAKEWORD(2, 2), &wsaData); 
    if(wsaRes != 0) 
    { 
     std::cerr << "WSAStartup failed!"; 
     return -1; 
    } 
    // Creates the socket 
    socket_addr = socket(AF_INET, SOCK_STREAM, 0); 
    if (socket_addr == INVALID_SOCKET) { 
     cout << "Could not create the socket!"; 
    } else { 
    //... 
    } 
}