Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 套接字连接总是成功的_C_Sockets_Winapi - Fatal编程技术网

C 套接字连接总是成功的

C 套接字连接总是成功的,c,sockets,winapi,C,Sockets,Winapi,我是winsock编程的初学者,我目睹了connect函数建立套接字连接的一种特殊行为。即使网络中没有有效的主机,套接字函数也会成功。例如,在我们的网络中没有ip192.168.4.28的主机,但连接到调用仍然成功,我尝试给出网络之外的ip地址,例如1.1.1.1,但仍然成功。api中是否有原因或错误。我使用了本文提供的msdn站点中的代码 代码 #ifndef UNICODE #define UNICODE #endif #define WIN32_LEAN_AND_MEA

我是winsock编程的初学者,我目睹了connect函数建立套接字连接的一种特殊行为。即使网络中没有有效的主机,套接字函数也会成功。例如,在我们的网络中没有ip192.168.4.28的主机,但连接到调用仍然成功,我尝试给出网络之外的ip地址,例如1.1.1.1,但仍然成功。api中是否有原因或错误。我使用了本文提供的msdn站点中的代码

代码

  #ifndef UNICODE
  #define UNICODE
  #endif

  #define WIN32_LEAN_AND_MEAN

  #include <winsock2.h>
  #include <ws2tcpip.h>
  #include <stdio.h>


  #pragma comment(lib, "ws2_32.lib")



  int main()
  {
     WSADATA wsaData;
     int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
     if (iResult != NO_ERROR) {
      wprintf(L"WSAStartup function failed with error: %d\n", iResult);
      return 1;
     }
     SOCKET ConnectSocket;
     ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

     if (ConnectSocket == INVALID_SOCKET) {
     wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
     WSACleanup();
     return 1;
    }
    sockaddr_in clientService;
    clientService.sin_family = AF_INET;

    clientService.sin_addr.s_addr = inet_addr("192.168.4.28"); //No Host by this ip   address 

    clientService.sin_port = htons(80); //Port is 80 

    iResult = connect(ConnectSocket, (SOCKADDR *) & clientService, sizeof      (clientService));

printf("The socket connect return status : %d ",iResult); // always 0 , indicating success

    if (iResult == SOCKET_ERROR) {

    wprintf(L"connect function failed with error: %ld\n", WSAGetLastError());

    iResult = closesocket(ConnectSocket);
    if (iResult == SOCKET_ERROR)
        wprintf(L"closesocket function failed with error: %ld\n", WSAGetLastError());
    WSACleanup();
    return 1;
   }

   wprintf(L"Connected to server.\n");

   iResult = closesocket(ConnectSocket);
   if (iResult == SOCKET_ERROR) {
      printf("\n socket Connection failed ");
      WSACleanup();
      return 1;
   }

   WSACleanup();
   return 0;
 }
#ifndef UNICODE
#定义UNICODE
#恩迪夫
#定义WIN32_精益_和_平均值
#包括
#包括
#包括
#pragma注释(lib,“ws2_32.lib”)
int main()
{
WSADATA WSADATA;
int-iResult=WSAStartup(MAKEWORD(2,2)和wsaData);
如果(iResult!=无错误){
wprintf(L“WSAStartup函数失败,错误:%d\n”,iResult);
返回1;
}
插座连接插座;
ConnectSocket=socket(AF\u INET、SOCK\u STREAM、IPPROTO\u TCP);
if(ConnectSocket==无效的_套接字){
wprintf(L“套接字函数失败,错误:%ld\n”,WSAGetLastError());
WSACleanup();
返回1;
}
客户端服务中的sockaddr_;
clientService.sin_family=AF_INET;
clientService.sin_addr.s_addr=inet_addr(“192.168.4.28”);//此ip地址没有主机
clientService.sin_port=htons(80);//端口为80
iResult=connect(ConnectSocket,(SOCKADDR*)&clientService,sizeof(clientService));
printf(“套接字连接返回状态:%d”,iResult);//始终为0,表示成功
if(iResult==SOCKET\u错误){
wprintf(L“连接函数失败,错误:%ld\n”,WSAGetLastError());
iResult=closesocket(ConnectSocket);
if(iResult==SOCKET\u错误)
wprintf(L“closesocket函数失败,错误:%ld\n”,WSAGetLastError());
WSACleanup();
返回1;
}
wprintf(L“已连接到服务器。\n”);
iResult=closesocket(ConnectSocket);
if(iResult==SOCKET\u错误){
printf(“\n套接字连接失败”);
WSACleanup();
返回1;
}
WSACleanup();
返回0;
}

您可能没有正确检查结果。显示您的代码。如果没有代码,我们将无法帮助您函数返回0,请稍候,我将发布代码。代码包含在@Barmara中,我正在使用visual studio 2010 professional edition