Pakiet UDP

0

siema programisty:)
mam taki sobie jeden problem i nie wiem o co biega
mozecie mi pomoc:)

TO JEST PROGRAM SERWER:

#include <iostream.h>
#include <conio.h>
#include <winsock2.h>

int main()
{
WSADATA WSD;
WSAStartup( MAKEWORD( 2 , 0 ) , &WSD);
SOCKET sock;
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(3000);
Addr.sin_addr.S_un.S_addr = inet_addr("172.17.0.213");

char buf[1024];
int s;

fd_set fdsecik;
timeval timevalik;
fdsecik.fd_array[0]=sock;
fdsecik.fd_count=1;
timevalik.tv_sec=1;
select( 0, &fdsecik, NULL, NULL, &timevalik );

recvfrom( sock, buf, 1024, 0, (sockaddr*)&Addr, &s );
cout << buf;
getch();
WSACleanup();
return 0;
}

TO JEST PROGRAM KLIENT:

#include <conio.h>
#include <winsock2.h>
#pragma hdrstop

//---------------------------------------------------------------------------
// PROGRAM KLIENT UDP
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
WSADATA WSD;
WSAStartup( MAKEWORD( 2 , 0 ) , &WSD);
SOCKET sock;
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(3000);
Addr.sin_addr.S_un.S_addr = inet_addr("83.28.239.117");
sendto( sock, "siuru", 6, 0,
(sockaddr*)&Addr, sizeof( sockaddr ) );
WSACleanup();
return 0;
}

OBA programy dzialaja w konsoli, tylko jak wysylam "siuru" do serwera na innym kompie oczywiscie to:
moj firewall pyta o zgode na dostep, zezwalam, tzn ze klient nawiazal polaczenie z netem. Snifferem sprawdzilem ze pakiet UDP zostal wyslany.
komputer z serwerem tez ma firewala i on pyta o zgode "na polaczenie z sieci".
WSZYSTKO JEST OK, TYLKO DLACZEGO SERWER (KONSOLA ) NIE WYSWIETLA NAPISU "SIURU"??

+++++++PROSZE UPRZEJMIE O POMOC+++++++++++++

0

Dodam ze programuje w Builderze 5 Enterprie pod XP:) - tak jakby co

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