stona www z tcp/udp

0

na tej stronie sa laczenia za pomoca tcp/udp http://keeller.kompozytor.net/ czy ktos zlaczyl to do jakiejs kupy te tcp i udp i czy zadzialalo mu to??

0

Jasne ze działa, jutro moge udostępnić prościutki serwer/klient, ale dziś nie mam czasu

0

dzieki. powiedz tylko gdzie go udostepnisz?

0

hymmm kiedy bedzie udostepniony ten prgram bo probuje go zlozyc ale cos nie tak mi z nim dziala

0

oto on

SERWER:

#include <conio.h>
#include <iostream>
#include <winsock.h>
using namespace std;


main()
{
 	  WSADATA wsaData;
 	  SOCKET sock_serwer,sock_klient;
	  struct sockaddr_in sock_in;
	  int rozmiar = sizeof(sock_in);
 	  
WSAStartup(MAKEWORD(2,0), &wsaData );
sock_serwer=socket(AF_INET, SOCK_STREAM, 0);

sock_in.sin_family = AF_INET; 
sock_in.sin_addr.s_addr = INADDR_ANY;
sock_in.sin_port = htons(10001);
memset(sock_in.sin_zero, 0, 8);
 
bind(sock_serwer,(sockaddr *)&sock_in, sizeof(sock_in));
listen(sock_serwer,2);

cout << "|- Waiting for connection -|\n";
sock_klient = accept(sock_serwer,(sockaddr *)&sock_in, &rozmiar);
if(sock_klient!=INVALID_SOCKET)
{
system("cls");
cout << "|- Connection Accepted -|\n\n";
}

char bufor[255];

while(true)
{
cin.getline(bufor,sizeof(bufor));
send(sock_klient,bufor,sizeof(bufor),0);
recv(sock_klient,bufor,sizeof(cos),0);
cout << "Otrzymales wiadomosc: " << bufor;
}
}

KLIENT:

#include <winsock.h>
#include <conio.h>
#include <iostream>
using namespace std;

main()
{
 	  WSADATA wsaData;
 	  int blad,rozmiar;
 	  const char host_name[15]="localhost";
	  SOCKET sock_klient;
	  struct sockaddr_in sock_in;
	  
WSAStartup(MAKEWORD(2,0), &wsaData );


sock_klient = socket( AF_INET, SOCK_STREAM, 0 );  

struct hostent *host;
host=gethostbyname(host_name);
sock_in.sin_family = AF_INET;
sock_in.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
sock_in.sin_port = htons(10001); 

if(connect(sock_klient,(sockaddr *) &sock_in, sizeof(sock_in))!=SOCKET_ERROR)
{
blad=0;
cout << "|- Connected -|\n\n";
}
else
{
blad=1;
cout << "Nie mozna nawiazac polaczenia!!!\n";
closesocket(sock_klient);
}

char bufor[255];

while(true)
{
cin.getline(bufor,sizeof(bufor));
send(sock_klient,bufor,sizeof(bufor),0);
recv(sock_klient,bufor,sizeof(cos),0);
cout << "Otrzymales wiadomosc: " << bufor;
}

getch();

		closesocket( sock_klient );
		WSACleanup();
	  }

Oczywiście jest to bardzo ubogi przykład ale można sie nauczyć z niego co nie co.

0

Skoro jesteśmy w temacie klient/serwer mam pytanie, wie ktoś jak sprawdzić czy przyszły dane do socketa i wtedy:

a) jeśli tak to odebrac je i wyświetlić oraz wysłać jakieś dane
b) jeśli nie to nie odbierać, ale wysłać jakieś dane

Potrzebuje tego, bo gdy używam funkcji ?recv? to program się blokuje i czeka aż przyjdą jakieś dane a musze zrobić tak żeby się nie blokował i wykonywał się dalej.
Z góry dzięki!

0

musisz zbindowac socketa w serwerze. w ten sposob przypiszesz mu komunikat, ktory system ma wyslac w momencie odebrania danych. potem system obslugi komunikatow. a zreszta po co ja sie mecze :0 www.winapi.org

0

Dzieki wielkie. Z tego co widze to jest zrobiony on na TCP, a moglbys jeszcze to na UDP zrobic wtedy bym widzial dokladne roznice miedzy nimi. pozdrawiam

0

Mardok, przelacz gniazdo w tryb nieblokujacy (NB - non blocking). Na pewno taki jest, tylko trzeba doczytac w dokumentacji, ktora funkcja przelacza ten tryb.

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