[ ACE_theScorpion @ 28.09.2006. 05:44 ] @
napravio sam malu server aplikaciju i klijent za za nju..eh sad,kada se klijentom konektujem na server preko localhosta(127.0.0.1) sve normalno radi,al kada pokusam da se konektujem preko svoje ip adrese ne moze da se konektuje..gasio sam firewall-e,pokusao preko telnet-a da se konektujem al uzalud..ima li ko ideju sta bi moglo biti???..takodje,na taj moj mali server sa svog kompa se ne mogu konektovati ni kad je na necijem drugom kompu..
[ nikoladsp @ 28.09.2006. 12:09 ] @
daj nam malo koda...daj nam malo soli... moras malo vise informacija, kod, os, i sl. za ovakav post it treba sai-baba
[ itf @ 28.09.2006. 12:13 ] @
Jesi odblokirao port u firewalu? Ako imaš WinXP SP2 onda bi ti se trebalo pojaviti upozorenje kada startaš server aplikaciju. Tada klikneš UNBLOCK. Ako nema, provjeri ručno u firewall postavkama da li je taj port otvoren na tom stroju gdje pokrećeš server.
[ yooyo @ 28.09.2006. 15:04 ] @
Da li si programe testirao u lokalnoj mrezi ili preko interneta?
Ako si preko interneta da li imas javne adrese (staticke ili dinamicke), da li su masine iza routera i da li je router konfigurisan da podrzava "virtuelne servere"?

[ ACE_theScorpion @ 28.09.2006. 16:26 ] @
ovako..os mi je windows xp pro SP2..za firewall koristim zonealarm a i windows firewall mi je ukljucen..provjeravao sam da li applikacija radi kada je firewall ugasen al ista stvar..server se bind-uje na port i ceka al se ne moze konektovati na njega preko interneta..trenutno sam na adsl-u..hmmm...sta josh..evo kod servera iz msdn-a koji takodje ima isti problem,mislim ja imam problem sa kodom :D :

Code:

#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define DEFAULT_PORT 5001
#define DEFAULT_PROTO SOCK_STREAM 

void Usage(char *progname) {
    fprintf(stderr,"Usage\n%s -p [protocol] -e [endpoint] -i [interface]\n",
        progname);
    fprintf(stderr,"Where:\n\tprotocol is one of TCP or UDP\n");
    fprintf(stderr,"\tendpoint is the port to listen on\n");
    fprintf(stderr,"\tinterface is the ipaddr (in dotted decimal notation)");
    fprintf(stderr," to bind to\n");
    fprintf(stderr,"Defaults are TCP,5001 and INADDR_ANY\n");
    WSACleanup();
    exit(1);
}
int main(int argc, char **argv) {

    char Buffer[128];
    char *interface= NULL;
    unsigned short port=DEFAULT_PORT;
    int retval;
    int fromlen;
    int i;
    int socket_type = DEFAULT_PROTO;
    struct sockaddr_in local, from;
    WSADATA wsaData;
    SOCKET listen_socket, msgsock;

    
    if (argc >1) {
        for(i=1;i <argc;i++) {
            if ( (argv[i][0] == '-') || (argv[i][0] == '/') ) {
                switch(tolower(argv[i][1])) {
                    case 'p':
                        if (!stricmp(argv[i+1], "TCP") )
                            socket_type = SOCK_STREAM;
                        else if (!stricmp(argv[i+1], "UDP") )
                            socket_type = SOCK_DGRAM;
                        else
                            Usage(argv[0]);
                        i++;
                        break;

                    case 'i':
                        interface = argv[++i];
                        break;
                    case 'e':
                        port = atoi(argv[++i]);
                        break;
                    default:
                        Usage(argv[0]);
                        break;
                }
            }
            else
                Usage(argv[0]);
        }
    }
    
    if ((retval = WSAStartup(0x202,&wsaData)) != 0) {
        fprintf(stderr,"WSAStartup failed with error %d\n",retval);
        WSACleanup();
        return -1;
    }
    
    if (port == 0){
        Usage(argv[0]);
    }

    local.sin_family = AF_INET;
    local.sin_addr.s_addr = (!interface)?INADDR_ANY:inet_addr(interface); 

    local.sin_port = htons(port);

    listen_socket = socket(AF_INET, socket_type,0); 
    
    if (listen_socket == INVALID_SOCKET){
        fprintf(stderr,"socket() failed with error %d\n",WSAGetLastError());
        WSACleanup();
        return -1;
    }


    if (bind(listen_socket,(struct sockaddr*)&local,sizeof(local) ) 
        == SOCKET_ERROR) {
        fprintf(stderr,"bind() failed with error %d\n",WSAGetLastError());
        WSACleanup();
        return -1;
    }



    if (socket_type != SOCK_DGRAM) {
        if (listen(listen_socket,5) == SOCKET_ERROR) {
            fprintf(stderr,"listen() failed with error %d\n",WSAGetLastError());
            WSACleanup();
            return -1;
        }
    }
    printf("%s: 'Listening' on port %d, protocol %s\n",argv[0],port,
        (socket_type == SOCK_STREAM)?"TCP":"UDP");
    while(1) {
        fromlen =sizeof(from);

        if (socket_type != SOCK_DGRAM) {
            msgsock = accept(listen_socket,(struct sockaddr*)&from, &fromlen);
            if (msgsock == INVALID_SOCKET) {
                fprintf(stderr,"accept() error %d\n",WSAGetLastError());
                WSACleanup();
                return -1;
            }
            printf("accepted connection from %s, port %d\n", 
                        inet_ntoa(from.sin_addr),
                        htons(from.sin_port)) ;
            
        }
        else
            msgsock = listen_socket;


        if (socket_type != SOCK_DGRAM)
            retval = recv(msgsock,Buffer,sizeof (Buffer),0 );
        else {
            retval = recvfrom(msgsock,Buffer,sizeof (Buffer),0,
                (struct sockaddr *)&from,&fromlen);
            printf("Received datagram from %s\n",inet_ntoa(from.sin_addr));
        }
            
        if (retval == SOCKET_ERROR) {
            fprintf(stderr,"recv() failed: error %d\n",WSAGetLastError());
            closesocket(msgsock);
            continue;
        }
        if (retval == 0) {
            printf("Client closed connection\n");
            closesocket(msgsock);
            continue;
        }
        printf("Received %d bytes, data [%s] from client\n",retval,Buffer);

        printf("Echoing same data back to client\n");
        if (socket_type != SOCK_DGRAM)
            retval = send(msgsock,Buffer,sizeof(Buffer),0);
        else
            retval = sendto(msgsock,Buffer,sizeof (Buffer),0,
                (struct sockaddr *)&from,fromlen);
        if (retval == SOCKET_ERROR) {
            fprintf(stderr,"send() failed: error %d\n",WSAGetLastError());
        }
        if (socket_type != SOCK_DGRAM){
            printf("Terminating connection\n");
            closesocket(msgsock);
        }
        else 
            printf("UDP server looping back for more requests\n");
        continue;
    }
}


[Ovu poruku je menjao X Files dana 28.09.2006. u 17:37 GMT+1]
[ yooyo @ 28.09.2006. 22:36 ] @
Kazes da si na adsl-u. Neznam kako je to uradjeno kod vas u BiH, ali ovde (u Beogradu) postoji dva nacina povezivanja preko ADSL-a:
- Dinamicka javna adresa (preko DHCP-a) -> username/ip@isp
- Lokalna adresa ISP-a -> username@isp

Ako imas dinamicku javnu adresu onda moras da znas koja ti je adresa dodeljena i da to uneses u klijentski program. Drugi nacin je da registrujes domen (npr. preko www.dyndns.org) i da koristis programcic koji ce da detektuje promenu ip adrese u obavesti DNS o promeni. Na ovaj nacin mozes da pristupis svom serveru preko domena umesto preko IP adrese. Ako imas kombinaciju router+adsl modem onda router treba da podesis da propusta zahteve za konekciju.

Ako imas lokalnu adresu onda nema sansi da neko pristupi tvom serveru sa interneta. U stvari moze, ali ISP mora da ti to dozvoli.

Da li ti prog radi u LAN-u?