Winsok2 problem

I have a problem using winsock 2:
1>c:\documents and settings\nandor\my documents\warknight\warknight server\warknight server\warknight server.cpp(14) : error C2065: 'WSADATA' : undeclared identifier

and lots more like this...where can i get the coresponding header files?
MSDN or Microsoft...you will also have to go to your compiler and tell it to include the winsock lib file...Idr it's name exactly, but you could probably do a search and find it.
I use VS 2005,i wrote this to the project configuration:
Linker->Input->Aditional dependencies->Ws_32.lib Mswsock.lib Advapi32.lib
Last edited on
I managed to get the code working,but how can I test it?If a connect 2 computers in LAN and on one is the server and on the other is the client,will it work?
Well, you could just make 2 .exes, one that hosts (run it first), then run the client (and have it connect to yourself). You can connect to yourself either using localhost or 172.0.0.1 (I think)
127.0.0.1
Will those program work for only one client or one client needs one server?
Yeah, you will either need to use some type of threading system in order to have one server handle multiple connections.

Boost::thread is a good one to check out:
http://www.boost.org/doc/libs/1_36_0/doc/html/thread.html
but...can this be achieved with winsock2?
I know that windows also has some functions for using threads, but those are Windows specific. CreateThread() and stuff IIRC...MSDN is your friend.
are there any tutorials?
Google for Winsock tutorials.
I tried...but i haven't got any for multiple conections...I'm now trying to make 256 ConnectSockets.

Here I try to get messages from several clients,but it's not working.
I have problems with connecting the new client,or maybe anything is wrong
My code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
int __cdecl main(void) 
{
	int con=0;
	time_t timebeg=time(NULL);
    WSADATA wsaData;
    SOCKET ListenSocket = INVALID_SOCKET,
           ClientSocket[256],
		   TMPS = INVALID_SOCKET;
    struct addrinfo *result = NULL,
                    hints;
    int iResult, iSendResult;
    int recvbuflen = DEFAULT_BUFLEN;
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }


    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed: %d\n", iResult);
        WSACleanup();
        return 1;
    }

    // Create a SOCKET for connecting to server
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) {
        printf("socket failed: %ld\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }

    // Setup the TCP listening socket
    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    if (iResult == SOCKET_ERROR) {
        printf("bind failed: %d\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }

    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) {
        printf("listen failed: %d\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }

    // Accept a client socket
    ClientSocket[0] = accept(ListenSocket, NULL, NULL);
    if (ClientSocket[0] == INVALID_SOCKET) {
        printf("accept failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
	int aux;
	TMPS=ListenSocket;
	 time_t seconds,seconds2;
	 struct tm * timeinfo;

		closesocket(ListenSocket);
		do {

			listen(ListenSocket, 1);
			if(ListenSocket!=TMPS)
			{
				con++;
				ClientSocket[con] = accept(ListenSocket, NULL, NULL);
                                                                //here I try to connect the new client to the server...But it's not working
			}
			for(int a=0;a<con+1;a++)
			{
				iResult = recv(ClientSocket[a], recvbuf, 64, 0);

				if (iResult > 0) {			
					time (&seconds);
					timeinfo = localtime ( &seconds );
					printf("Received content at %scontent: %s ",asctime (timeinfo),recvbuf);
					response();
					iSendResult = send( ClientSocket[a], recvbuf, iResult, 0 );
					if (iSendResult == SOCKET_ERROR) {
						printf("send failed: %d\n", WSAGetLastError());
						closesocket(ClientSocket[a]);
						WSACleanup();
						return 1;
					}
					seconds2 = time (NULL);
					printf("Response: %s in %u s\n", recvbuf,seconds2-seconds);
				}
				else if (iResult == 0)
					printf("Connection closing...\n");
				else  {
					printf("recv failed: %d\n", WSAGetLastError());
					closesocket(ClientSocket[a]);
					WSACleanup();
					return 1;
				}
			}

		} while (iResult > 0);
	for(int a=0;a<156;a++)
	{
    // shutdown the connection since we're done
    iResult = shutdown(ClientSocket[a], SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed: %d\n", WSAGetLastError());
        closesocket(ClientSocket[a]);
        WSACleanup();
        return 1;
    }

    // cleanup
	
    closesocket(ClientSocket[a]);
	}
    WSACleanup();
	int a;std::cin>>a;
    return 0;
}


Can someone help?
Last edited on
Topic archived. No new replies allowed.