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??
- Rejestracja:prawie 20 lat
- Ostatnio:prawie 12 lat
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.
- Rejestracja:prawie 20 lat
- Ostatnio:prawie 12 lat
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!

- Rejestracja:ponad 21 lat
- Ostatnio:prawie 14 lat
- Postów:475
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
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.