zori Temat założony przez niniejszego użytkownika |
Jak to skompilować » 2009-01-06 22:36:13 |
|
DejaVu |
» 2009-01-06 22:38:31 Dodałem do oczekujących, jutro zerknę w to. |
|
lynx |
» 2009-01-07 00:12:33 |
|
zori Temat założony przez niniejszego użytkownika |
» 2009-01-07 00:21:16 |
|
DejaVu |
» 2009-01-07 02:58:47 Fatalny kod wybrałeś do nauki komunikacji sieciowej. Poprawiłem tak kod, aby kompilował się pod Visual Studio C++, ale pod GCC tego nie skompilujesz bo niektórych z użytych funkcji nie ma w bibliotekach dostępnych z Dev-C++. Co więcej, Twój program nie zadziała na systemach Win 95, 98, ME, XP poniżej SP2. Polecam poszukać innego kursu i innych przykładów. Obsługę sieci można pisać tak, że 99% kodu jest przenośne zarówno pod windowsa jak i linuxa... Niektóre funkcje pierwszy raz na oczy widzę pomimo, iż pisałem już w swoim życiu serwery TCP i UDP. Ponadto na dzień dzisiejszy obsługę IPv6 darowałbym sobie.
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <winsock2.h> #include <Ws2tcpip.h> #define MYPORT "4950"
#define MAXBUFLEN 100
void * get_in_addr( struct sockaddr * sa ) { if( sa->sa_family == AF_INET ) { return &((( struct sockaddr_in * ) sa )->sin_addr ); } return &((( struct sockaddr_in6 * ) sa )->sin6_addr ); }
int main( void ) { int sockfd; struct addrinfo hints, * servinfo, * p; int rv; int numbytes; struct sockaddr_storage their_addr; char buf[ MAXBUFLEN ]; size_t addr_len; char s[ INET6_ADDRSTRLEN ]; memset( & hints, 0, sizeof hints ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_PASSIVE; if(( rv = getaddrinfo( NULL, MYPORT, & hints, & servinfo ) ) == - 1 ) { fprintf( stderr, "getaddrinfo: %s\n", gai_strerror( rv ) ); return 1; } for( p = servinfo; p != NULL; p = p->ai_next ) { if(( sockfd = socket( p->ai_family, p->ai_socktype, p->ai_protocol ) ) == - 1 ) { perror( "listener: socket" ); continue; } if( bind( sockfd, p->ai_addr, p->ai_addrlen ) == - 1 ) { closesocket( sockfd ); perror( "listener: bind" ); continue; } break; } if( p == NULL ) { fprintf( stderr, "listener: failed to bind socket\n" ); return 2; } freeaddrinfo( servinfo ); printf( "listener: waiting to recvfrom...\n" ); addr_len = sizeof their_addr; if(( numbytes = recvfrom( sockfd, buf, MAXBUFLEN - 1, 0, reinterpret_cast < struct sockaddr *>( & their_addr ),( int * ) & addr_len ) ) == - 1 ) { perror( "recvfrom" ); exit( 1 ); } printf( "listener: got packet from %s\n", inet_ntop( their_addr.ss_family, get_in_addr(( struct sockaddr * ) & their_addr ), s, sizeof s ) ); printf( "listener: packet is %d bytes long\n", numbytes ); buf[ numbytes ] = '\0'; printf( "listener: packet contains \"%s\"\n", buf ); closesocket( sockfd ); return 0; }
/edit: Jeszcze trzeba zlinkować parę dll'i, jednak tego już mi się nie chciało robić. Program po dopisaniu odpowiednich linijek do linker'a się skompiluje. /edit2: O szczegółach proponuję poczytać w MSDN'ie: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspxhttp://msdn.microsoft.com/en-us/library/ms737530(VS.85).aspx |
|
zori Temat założony przez niniejszego użytkownika |
» 2009-01-07 12:02:46 Tu dosatłem link do tego kursu w jednym z innych tematów jesli ktos posiada lepszy będe bardzo wdzięczny bo do zaawansowanych programistów nie naleze narzie chce zrobić coś prostego przesłac między jednym a drugim komputerem 1 pakie i odczytac go.
/edit
zna ktos moze jakiś przykładow programy do przeanalizowania będe bardzo wdzięczny za pomoc. |
|
DejaVu |
» 2009-01-09 17:15:56 Zacznij się uczyć podstaw winsock2. Gdzieś był link na forum do kursu... /edit: http://forum.ddt.pl/?Tid=211/edit2: Jeśli chcesz napisać komunikację sieciową bez większych problemów na kilka klientów polecam protokół UDP. Ma on swoje wady, jednak do nauki komunikacji sieciowej można by powiedzieć, że jest on idealny. |
|
mirko2413 |
Prośba » 2009-04-04 23:54:59 Witam!Jestem świeżo zarejestrowanym użytkownikiem tego forum i chciałbym prosić o pomoc.am do napisania na jutro jakikolwiek program w C++za pomocą Dev-C++.Wytworzyłem coś takiego i nie mogę tego skompilować,może ktoś by mi mógł pomóc? #include <cstdlib> #include <math.h> #include <iostream> #include <cstdio>
using namespace std;
double liczenie( int a, int h ) { double pol_pow; pol_pow = 1 / 2 * a + 1 / 2 * h; return pol_pow; } void wczytywanie() { int a, h; double wynik; cout << "Wprowadz dlugosc boku (a):"; cin >> a; cout << "Wprowadz wysokosc (h)"; cin >> h; wynik = liczenie( a, h ); cout << "Pole Powierzchni:" << wynik << "\n"; }
int main() { wczytywanie(); system( "pause" ); return 0; } |
|
« 1 » 2 |