Connect()不起作用 我在遵循C++网络教程,
但是到目前为止我写的代码并不完全有效,我做错了什么Connect()不起作用 我在遵循C++网络教程,,c++,winsock,C++,Winsock,但是到目前为止我写的代码并不完全有效,我做错了什么 my "main.cpp" #include "main.h" using namespace std; int winsock() { //variables const int winsock_version = 2; WSAData wsa; SOCKET sok; SOCKADDR_IN server; //start up WSAStartup(MAKEWORD
my "main.cpp"
#include "main.h"
using namespace std;
int winsock()
{
//variables
const int winsock_version = 2;
WSAData wsa;
SOCKET sok;
SOCKADDR_IN server;
//start up
WSAStartup(MAKEWORD(winsock_version,0), &wsa);
sok = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//check startup
if(WSAStartup(MAKEWORD(winsock_version,0), &wsa) != 0)
{
cout << "An error occured during startup! \n";
WSACleanup();
return -1;
}
//check version
if (LOBYTE(wsa.wVersion) < winsock_version)
{
cout << "Your version of winsock is too low!\n";
cout << "\nWinsock 2.0 or above is required.";
return -1;
}
//check if socket is valid
if (sok == INVALID_SOCKET)
{
cout << "Invalid socket!";
return -1;
}
//set connection type
server.sin_family = AF_INET;
//set port
server.sin_port = htons(80);
//set adress to connect to
server.sin_addr.S_un.S_addr = INADDR_ANY;
//connect
connect(sok,(sockaddr*)(&server), sizeof(server));
//bind socket
bind(sok, (sockaddr*)(&server), sizeof(server));
if(connect(sok,(sockaddr*)(&server), sizeof(server)) !=0)
{
cout << "error during connecting! \n";
WSACleanup();
closesocket(sok);
return -1;
}
cout << "Connection was made!";
//clean up
WSACleanup();
closesocket(sok);
if (WSACleanup() !=0 || closesocket(sok) !=0)
{
cout << "Clean up failed! \n";
return -1;
}
return 0;
}
int main()
{
winsock();
}
my“main.cpp”
#包括“main.h”
使用名称空间std;
int winsock()
{
//变数
const int winsock_version=2;
WSAData wsa;
承插索;
服务器中的SOCKADDR_;
//启动
WSAStartup(MAKEWORD(winsock_版本,0)和wsa);
sok=套接字(AF\u INET、SOCK\u STREAM、IPPROTO\u TCP);
//检查启动
if(WSAStartup(MAKEWORD(winsock_版本,0),&wsa)!=0)
{
无法您无法连接到INADDR\u ANY
。请指定一个IP地址
为什么要调用WSAStartup()
两次
而且您不必使用bind()
来执行connect()
,除非必须指定本地端口(如SMB协议)这一点非常重要
有很多,请阅读。我下面的教程说这是可能的,www.madwizard.org/programming/tutorials/netcpp/4我说的是INADDR_any当你尝试连接到某个东西时,你必须明确地址和协议,否则它就没有意义。对于听来说,这是有意义的,因为它意味着“从任何地方接受连接”,对于连接,它意味着“连接到任何地方”!不,您永远不能连接到此地址。
INADDR\u ANY
用于listen()
仅限。这意味着您正在打开一个端口并接受来自您拥有的任何IP或接口的连接,因为您没有指定一个。它字面上的意思是IP0.0.0
@user2875871:您误读了教程。您可以绑定到INADDR\u any,从而侦听机器所有网络接口上的传入连接(第6节),但您无法连接到INADDR_ANY(第5节)。
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
// std libs
#include <iostream>
#include <fstream>
#include <string>
//windows
#include <windows.h>
//networking libs
#include <winsock2.h>
// layout engine
#endif // MAIN_H_INCLUDED