Winsock教程错误

2024-01-13

刚接触C++ Express,在遵循winsock教程后,出现了无数错误。 已将 Windows SDK 7.1 链接到属性。我缺少什么?

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

#pragma comment(lib, "Ws2_32.lib")
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

int main(int argc, char **argv)
{
     WSADATA wsaData;

     SOCKET SendingSocket;

     // Server/receiver address

     SOCKADDR_IN          ServerAddr, ThisSenderInfo;

     // Server/receiver port to connect to

     unsigned int         Port = 7171;

     int  RetCode;

     // Be careful with the array bound, provide some checking mechanism...

     char sendbuf[1024] = "This is a test string from sender";

     int BytesSent, nlen;



     // Initialize Winsock version 2.2

     WSAStartup(MAKEWORD(2,2), &wsaData);

     printf("Client: Winsock DLL status is %s.\n", wsaData.szSystemStatus);



     // Create a new socket to make a client connection.

     // AF_INET = 2, The Internet Protocol version 4 (IPv4) address family, TCP protocol

     SendingSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

     if(SendingSocket == INVALID_SOCKET)

     {

          printf("Client: socket() failed! Error code: %ld\n", WSAGetLastError());

          // Do the clean up

          WSACleanup();

          // Exit with error

          return -1;

     }

     else

          printf("Client: socket() is OK!\n"); 



     // Set up a SOCKADDR_IN structure that will be used to connect

     // to a listening server on port 5150. For demonstration

     // purposes, let's assume our server's IP address is 127.0.0.1 or localhost



     // IPv4

     ServerAddr.sin_family = AF_INET;

     // Port no.

     ServerAddr.sin_port = htons(Port);

     // The IP address

     ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");



     // Make a connection to the server with socket SendingSocket.

     RetCode = connect(SendingSocket, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr));

     if(RetCode != 0)

     {

          printf("Client: connect() failed! Error code: %ld\n", WSAGetLastError());

          // Close the socket

          closesocket(SendingSocket);

          // Do the clean up

          WSACleanup();

          // Exit with error

          return -1;

     }

     else

     {

          printf("Client: connect() is OK, got connected...\n");

          printf("Client: Ready for sending and/or receiving data...\n");

     }



     // At this point you can start sending or receiving data on

     // the socket SendingSocket.



     // Some info on the receiver side...

     getsockname(SendingSocket, (SOCKADDR *)&ServerAddr, (int *)sizeof(ServerAddr));

     printf("Client: Receiver IP(s) used: %s\n", inet_ntoa(ServerAddr.sin_addr));

     printf("Client: Receiver port used: %d\n", htons(ServerAddr.sin_port));



     // Sends some data to server/receiver...

     BytesSent = send(SendingSocket, sendbuf, strlen(sendbuf), 0);



     if(BytesSent == SOCKET_ERROR)

          printf("Client: send() error %ld.\n", WSAGetLastError());

     else

     {

          printf("Client: send() is OK - bytes sent: %ld\n", BytesSent);

          // Some info on this sender side...

          // Allocate the required resources

          memset(&ThisSenderInfo, 0, sizeof(ThisSenderInfo));

          nlen = sizeof(ThisSenderInfo);



          getsockname(SendingSocket, (SOCKADDR *)&ThisSenderInfo, &nlen);

          printf("Client: Sender IP(s) used: %s\n", inet_ntoa(ThisSenderInfo.sin_addr));

          printf("Client: Sender port used: %d\n", htons(ThisSenderInfo.sin_port));

          printf("Client: Those bytes represent: \"%s\"\n", sendbuf);

     }



     if( shutdown(SendingSocket, SD_SEND) != 0)

          printf("Client: Well, there is something wrong with the shutdown().

                    The error code: %ld\n", WSAGetLastError());

     else

          printf("Client: shutdown() looks OK...\n");

     // When you are finished sending and receiving data on socket SendingSocket,

     // you should close the socket using the closesocket API. We will

     // describe socket closure later in the chapter.

     if(closesocket(SendingSocket) != 0)

          printf("Client: Cannot close \"SendingSocket\" socket. Error code: %ld\n", WSAGetLastError());

     else

          printf("Client: Closing \"SendingSocket\" socket...\n");



     // When your application is finished handling the connection, call WSACleanup.

     if(WSACleanup() != 0)

          printf("Client: WSACleanup() failed!...\n");

     else

          printf("Client: WSACleanup() is OK...\n");

     return 0;

}

错误日志:

    1>------ Build started: Project: ws, Configuration: Debug Win32 ------
1>Compiling...
1>ws.cpp
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(1) : warning C4627: '#include <winsock2.h>': skipped when looking for precompiled header use
1>        Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(7) : error C2065: 'WSADATA' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(7) : error C2146: syntax error : missing ';' before identifier 'wsaData'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(7) : error C2065: 'wsaData' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(9) : error C2065: 'SOCKET' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(9) : error C2146: syntax error : missing ';' before identifier 'SendingSocket'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(9) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(13) : error C2065: 'SOCKADDR_IN' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(13) : error C2146: syntax error : missing ';' before identifier 'ServerAddr'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(13) : error C2065: 'ServerAddr' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(13) : error C2065: 'ThisSenderInfo' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(31) : error C2065: 'wsaData' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(31) : error C3861: 'WSAStartup': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(31) : error C3861: 'MAKEWORD': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(33) : error C2065: 'wsaData' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(33) : error C2228: left of '.szSystemStatus' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(41) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(41) : error C2065: 'AF_INET' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(41) : error C2065: 'SOCK_STREAM' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(41) : error C2065: 'IPPROTO_TCP' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(41) : error C3861: 'socket': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(43) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(43) : error C2065: 'INVALID_SOCKET' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(47) : error C3861: 'WSAGetLastError': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(51) : error C3861: 'WSACleanup': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(75) : error C2065: 'ServerAddr' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(75) : error C2228: left of '.sin_family' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(75) : error C2065: 'AF_INET' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(79) : error C2065: 'ServerAddr' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(79) : error C2228: left of '.sin_port' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(79) : error C3861: 'htons': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(83) : error C2065: 'ServerAddr' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(83) : error C2228: left of '.sin_addr' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(83) : error C2228: left of '.s_addr' must have class/struct/union
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(83) : error C3861: 'inet_addr': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(89) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(89) : error C2065: 'SOCKADDR' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(89) : error C2059: syntax error : ')'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(89) : error C3861: 'connect': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(95) : error C3861: 'WSAGetLastError': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(99) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(99) : error C3861: 'closesocket': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(103) : error C3861: 'WSACleanup': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(131) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(131) : error C2065: 'SOCKADDR' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(131) : error C2059: syntax error : ')'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(133) : error C2065: 'ServerAddr' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(133) : error C2228: left of '.sin_addr' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(131) : error C3861: 'getsockname': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(133) : error C3861: 'inet_ntoa': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(135) : error C2065: 'ServerAddr' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(135) : error C2228: left of '.sin_port' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(135) : error C3861: 'htons': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(141) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(141) : error C3861: 'send': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(141) : error C3861: 'strlen': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(145) : error C2065: 'SOCKET_ERROR' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(147) : error C3861: 'WSAGetLastError': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(159) : error C2065: 'ThisSenderInfo' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(159) : error C2065: 'ThisSenderInfo' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(159) : error C2070: ''unknown-type'': illegal sizeof operand
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(159) : error C3861: 'memset': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(161) : error C2065: 'ThisSenderInfo' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(161) : error C2070: ''unknown-type'': illegal sizeof operand
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(165) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(165) : error C2065: 'SOCKADDR' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(165) : error C2059: syntax error : ')'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(167) : error C2065: 'ThisSenderInfo' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(167) : error C2228: left of '.sin_addr' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(165) : error C3861: 'getsockname': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(167) : error C3861: 'inet_ntoa': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(169) : error C2065: 'ThisSenderInfo' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(169) : error C2228: left of '.sin_port' must have class/struct/union
1>        type is ''unknown-type''
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(169) : error C3861: 'htons': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(177) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(177) : error C2065: 'SD_SEND' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(177) : error C3861: 'shutdown': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(179) : error C2001: newline in constant
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(181) : error C2146: syntax error : missing ')' before identifier 'The'
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(181) : error C2017: illegal escape sequence
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(181) : error C2001: newline in constant
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(193) : error C2065: 'SendingSocket' : undeclared identifier
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(193) : error C3861: 'closesocket': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(195) : error C3861: 'WSAGetLastError': identifier not found
1>c:\users\wildfire\documents\visual studio 2008\projects\ws\ws\ws.cpp(205) : error C3861: 'WSACleanup': identifier not found
1>Build log was saved at "file://c:\Users\Wildfire\Documents\Visual Studio 2008\Projects\ws\ws\Debug\BuildLog.htm"
1>ws - 84 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Move #include "stdafx.h"到顶部。找不到预编译头文件stdafx.h。它是 第一个错误。

当您使用预编译头时,您预编译它们所通过的头文件(在本例中stdafx.h) 应始终位于文件的第一行(注释可以)。

还有这个

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

应该在之前winsock2.h包容性。这告诉编译器不要包含太多 Windows SDK 文件以加快编译速度。把这个放在后面#include <winsock2.h>没有影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Winsock教程错误 的相关文章

随机推荐