Winsock - klient

0

Próbuje napisac progam, który przesyła jakieś dane najlepiej text.
Napisałem kod, który przedstawiam poniżej...
...chodzi o to że nie moge odebrać textu, którego serwer przesyła do klienta...
serwer:
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
	WSADATA WSD;
	SOCKET sock;

	printf("Zakladanie gniazda...\n");
	
	WSAStartup( MAKEWORD( 2 , 0 ) , &WSD);

	sock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );

	int opt=4096;

	setsockopt( sock, SOL_SOCKET, SO_SNDBUF, 
            (char*)&opt, sizeof( opt ) );
	setsockopt( sock, SOL_SOCKET, SO_RCVBUF, 
            (char*)&opt, sizeof( opt ) );

	bool bopt = true;

	setsockopt( sock, SOL_SOCKET, SO_BROADCAST, 
            (char*)&bopt, sizeof( bopt ) );
	setsockopt( sock, SOL_SOCKET, SO_DONTLINGER, 
            (char*)&bopt, sizeof( bopt ) );
	sockaddr_in Addr;

	Addr.sin_family = AF_INET; // PF_INET
	Addr.sin_port = htons(3000);
	Addr.sin_addr.S_un.S_addr = htonl( ADDR_ANY );
	// zerujemy resztę struktury
	memset( Addr.sin_zero , 0, 8);

	bind( sock, (sockaddr*)&Addr, sizeof( sockaddr ) );

	Addr.sin_port=htons( 4000 );
	Addr.sin_addr.S_un.S_addr = inet_addr("localhost");
while(1)
{
	sendto( sock, "Yol Yol!", 9, 0, 
        (sockaddr*)&Addr, sizeof( sockaddr ) );
			printf("%d",WSAGetLastError());
}

	getch();

	closesocket( sock );

	WSACleanup( );

	return 0;
}

klient:

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
	WSADATA WSD;
	SOCKET sock;
	char buf[1024];
	int  s;

	printf("Zakladanie gniazda...\n");
	
	WSAStartup( MAKEWORD( 2 , 0 ) , &WSD);

	sock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );

	if (sock == INVALID_SOCKET)
    {
        printf("Funkcja socket() zakończona błędem: %d\n",
                WSAGetLastError());
        return 1;
    }

	int opt=4096;

	setsockopt( sock, SOL_SOCKET, SO_SNDBUF, 
            (char*)&opt, sizeof( opt ) );
	setsockopt( sock, SOL_SOCKET, SO_RCVBUF, 
            (char*)&opt, sizeof( opt ) );

	bool bopt = true;

	setsockopt( sock, SOL_SOCKET, SO_BROADCAST, 
            (char*)&bopt, sizeof( bopt ) );
	setsockopt( sock, SOL_SOCKET, SO_DONTLINGER, 
            (char*)&bopt, sizeof( bopt ) );
	sockaddr_in Addr;

	Addr.sin_family = AF_INET; // PF_INET
	Addr.sin_port = htons(3000);
	Addr.sin_addr.S_un.S_addr = htonl( ADDR_ANY );
	// zerujemy resztę struktury
	memset( Addr.sin_zero , 0, 8);

	bind( sock, (sockaddr*)&Addr, sizeof( sockaddr ) );

	Addr.sin_port = htons(4000);
	Addr.sin_addr.S_un.S_addr = inet_addr("localhost");

	s = 1024;

	recvfrom( sock, buf, 1024, 0, (sockaddr*)&Addr, &s );
	printf("%d\n",WSAGetLastError( ));
	printf("%c\n",buf);

	getch();

	closesocket( sock );

	WSACleanup( );

	return 0;
}

:|

0

brakuje funkcji accept w petli serwera. poszukaj tutorka do socketow i dokladnie przeczytaj...

0

Jak wiesz to powiedz bo nie wiem jak to zrobić w połączniach datagramowych. Wszędzie tylko piszą o połączeniach strumieniwych.

0

Nowlasnie uzyj strumieniowych jak serwer piszesz !!!

0

Ale można tak? Bo ja chciałem napisać datagramowo...sorry ale możes mi przepisać ten kod z poprawkami...z góry dziękuje...

P.S.
Jestem jeszcze troche zielony w winsock i mam dopiero 15 lat, ale szybko się ucze... ;-)

0

Ja tez mam 15lat a podstawy socketow to jeden dzien jak masz zapal ;-)
Hmm dawalem juz link do Beej's Socket Guide, poczytaj masz tam przyklady...

0

Wiesz, srumieniowe to ja w jeden wieczór opanowałem tylko nie wiem jak z tymi datagramami... [krzyk]

0

Oki już nie trzeba tyle robiłem, że teraz znam win sock prawie na wylot choć jest jeszcze dużo, dużo funkcji ;-) więcej do nauki...

0

Po wklejeniu kodu klijenta zapodanego przez miik i probie kompilacji otrzymuje w
Dev-C++(4.9.8.0 na Win98) takie bledy:

[Linker error] undefined reference to WSAStartup@8' [Linker error] undefined reference to socket@12'
[Linker error] undefined reference to setsockopt@20' [Linker error] undefined reference to setsockopt@20'
[Linker error] undefined reference to `WSAGetLastError@0'
..itp;/..jak pozbyc sie tego bledu..z gory thx.

0

dolinkowalem libwsock32.a i teraz tylko zostal taki blad

[Linker error] undefined reference to `__gxx_personality_v0'

1 użytkowników online, w tym zalogowanych: 0, gości: 1