[ Dragi Tata @ 22.02.2005. 19:42 ] @
Mora da se linkuje biblioteka ws2_32.lib

[Edit] A vidim i da news server opet zeza sa vremenom slanja poruke. [/Edit]
[ stameni @ 22.02.2005. 20:40 ] @
Brčić i Kmetić su napisali odličan tutorijal - seminarski rad o

programiranju TCP/IP Unix API-jima. U dodatku postoji i primer klijenta i

servera za Windows. Međutim, ni jedan ni drugi program ne mogu uspešno da

se linkuju u Visual C++ 6. Pošto pretpostavljam da je reč o istom tipu

problema (javlja se ista greška LNK2001 prilikom linkovanja), evo ispod

samo programa za klijent (nešto je kraći), kao i outputa kompajlera, pa ako

neko zna rešenje problema, ne bilo mu teško da javi.


Code:


/* client.c -- a stream socket client demo */


#include <winsock2.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define PORT 3490 // the port client will be connecting to

#define MAXDATASIZE 100 // max number of bytes we can get at once


int main(int argc, char *argv[])

{

int sockfd, numbytes;

char buf[MAXDATASIZE];

struct hostent *he;

struct sockaddr_in their_addr; // connector"s address information

WSADATA wsaData;


if (argc != 2) {

fprintf(stderr,"usage: client hostnamen");

exit(1);

}

if (WSAStartup(0x202, &wsaData) == SOCKET_ERROR) {

fprintf(stderr,"WSAStartup failed with error %dn",WSAGetLastError());

WSACleanup();

exit(1);

}

if ((he = gethostbyname(argv[1])) == NULL) { // get the host info

fprintf(stderr,"gethostbyname");

WSACleanup();

exit(1);

}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

fprintf(stderr,"socket");

WSACleanup();

exit(1);

}

their_addr.sin_family = AF_INET; // host byte order

their_addr.sin_port = htons(PORT); // short, network byte order

their_addr.sin_addr = *((struct in_addr *)he->h_addr);

memset(&(their_addr.sin_zero), "", 8); // zero the rest of the struct

if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct

sockaddr)) == -1) {

fprintf(stderr,"connect");

WSACleanup();

exit(1);

}

if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {

fprintf(stderr,"recv");

WSACleanup();

exit(1);

}

buf[numbytes] = "";

printf("Received: %s",buf);

closesocket(sockfd);

WSACleanup();

return 0;

}




Greške koje linker prijavljuje su:

[code]

client.obj : error LNK2001: unresolved external symbol __imp__closesocket@4

client.obj : error LNK2001: unresolved external symbol __imp__recv@16

client.obj : error LNK2001: unresolved external symbol __imp__connect@12

client.obj : error LNK2001: unresolved external symbol __imp__htons@4

client.obj : error LNK2001: unresolved external symbol __imp__socket@12

client.obj : error LNK2001: unresolved external symbol

__imp__gethostbyname@4

client.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0

client.obj : error LNK2001: unresolved external symbol

__imp__WSAGetLastError@0

client.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8

Debug/abcd.exe : fatal error LNK1120: 9 unresolved externals

Error executing link.exe.

[code]
[ srdjandakic @ 23.02.2005. 10:28 ] @
BTW, pogledaj http://www.hawksoft.com/hawknl/

Vrlo zgodan mali portabilan API koji je wrapper oko WinSock, ima primera za to što tražiš (klijent-server u VC++ 6)
[ stameni @ 23.02.2005. 10:43 ] @
Citat:
Mora da se linkuje biblioteka ws2_32.lib



To je to. Hvala!
[ ivbrcic @ 23.02.2005. 14:55 ] @
Hvala na pohvalama za seminarski rad.

Seminarski rad ce dobiti i svoje poboljsanje, iako ne znam tocno kada, a to
poboljsanje ce biti u obliku, da ce se kroz taj seminar pokusati obraditi i design patterns u c++. To je dobar primjer da se uoce dobre strane objektnog programiranja, jer je iz onih kodova vidljivo da su vrlo neuredni i neprakticni.