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+++++++++++++