Skocz do zawartości

39dll w C++


Mentoss

Rekomendowane odpowiedzi

@Konrad

D:\CBPROJECTS\srvapp\buffer.h|3|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CBuffer'|

D:\CBPROJECTS\srvapp\tools.h|7|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CTools'|

D:\CBPROJECTS\srvapp\socket.h|5|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CSocket'|

D:\CBPROJECTS\srvapp\list.h|3|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CList'|

D:\CBPROJECTS\srvapp\39dll.cpp|9|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'buffers'|

D:\CBPROJECTS\srvapp\39dll.cpp|10|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'sockets'|

D:\CBPROJECTS\srvapp\39dll.cpp|11|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'files'|

D:\CBPROJECTS\srvapp\39dll.cpp|12|error: expected ')' before '*' token|

D:\CBPROJECTS\srvapp\39dll.cpp|13|error: expected ')' before '*' token|

D:\CBPROJECTS\srvapp\39dll.cpp|16|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|25|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|34|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|43|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|50|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|59|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|66|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|74|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|85|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|100|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|116|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|123|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|128|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|133|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|140|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|149|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|156|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|161|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|166|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|172|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|178|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|184|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|191|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|197|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|203|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|209|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|215|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|221|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|227|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|233|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|239|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|246|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|253|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|260|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|267|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|274|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|280|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|286|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|292|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|299|error: expected identifier or '(' before string constant|

D:\CBPROJECTS\srvapp\39dll.cpp|306|error: expected identifier or '(' before string constant|

||More errors follow but not being shown.|

||Edit the max errors limit in compiler options...|

||=== Build finished: 50 errors, 0 warnings ===|

Zaglądałem w źródła, ale chcę tylko możliwość użycia funkcji tak, jak w GMie. Nie jestem żadnym ekspertem c++.

 

@Shocker:

Taki właśnie jest plan. Serwer osobno (c++), gra osobno (GM).

 

@Edie:

Kod źródłowy jest w paczce z 39dll. Kłopot w tym, że nie da się go skompilować. Przynajmniej w Code::Block -sie.

Odnośnik do komentarza
Udostępnij na innych stronach

wyglada, jakby naglowki wymienionych klas nie byly zaincludowane w danym cpp

Odnośnik do komentarza
Udostępnij na innych stronach

Bawiłem się tym, kombinowałem... do source'ów dorzuciłem wszystkie *.cpp i *.h z wyjątkiem main.cpp, tak jak pisałeś, Konrad. W pliku głównym dałem #include i wszystkie załączone *.cpp po kolei. I nie wywala błędów. Złożę jakiś test i zobaczę, czy działa. Dzięki wielkie!

 

Edit: Nie wywala errorów, jeśli próbuję zaincludować nieistniejący includes.cpp. W przeciwnym wypadku:

Compiling: main.cpp

In file included from D:\CBPROJECTS\srvapp\main.cpp:3:

D:\CBPROJECTS\srvapp\socket.cpp: In member function 'bool CSocket::tcpconnect(char*, int, int)':

D:\CBPROJECTS\srvapp\socket.cpp:8: warning: comparison between signed and unsigned integer expressions

D:\CBPROJECTS\srvapp\socket.cpp: In member function 'bool CSocket::udpconnect(int, int)':

D:\CBPROJECTS\srvapp\socket.cpp:117: warning: comparison between signed and unsigned integer expressions

Linking console executable: bin\Debug\srvapp.exe

obj\Debug\main.o: In function `CList':

D:/CBPROJECTS/srvapp/list.cpp:2: multiple definition of `CList::CList()'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:2: first defined here

obj\Debug\main.o: In function `CList':

D:/CBPROJECTS/srvapp/list.cpp:2: multiple definition of `CList::CList()'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:2: first defined here

obj\Debug\main.o: In function `CList':

D:/CBPROJECTS/srvapp/list.cpp:9: multiple definition of `CList::CList(int)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:9: first defined here

obj\Debug\main.o: In function `CList':

D:/CBPROJECTS/srvapp/list.cpp:9: multiple definition of `CList::CList(int)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:9: first defined here

obj\Debug\main.o: In function `~CList':

D:/CBPROJECTS/srvapp/list.cpp:16: multiple definition of `CList::~CList()'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:16: first defined here

obj\Debug\main.o: In function `~CList':

D:/CBPROJECTS/srvapp/list.cpp:16: multiple definition of `CList::~CList()'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:16: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:21: multiple definition of `CList::Add(void*)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:21: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:33: multiple definition of `CList::Remove(void*)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:33: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:46: multiple definition of `CList::Remove(int)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:46: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:55: multiple definition of `CList::set(int, void*)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:55: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:60: multiple definition of `CList::Clear()'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:60: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:67: multiple definition of `CList::find(void*)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:67: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:73: multiple definition of `CList::operator[](int)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:73: first defined here

obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:79: multiple definition of `CList::item(int)'

obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:79: first defined here

obj\Debug\md5.o: In function `Z7MD5InitP7MD5_CTXm':

D:/CBPROJECTS/srvapp/md5.cpp:196: multiple definition of `MD5Init(MD5_CTX*, unsigned long)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:196: first defined here

obj\Debug\md5.o: In function `Z9MD5UpdateP7MD5_CTXPhj':

D:/CBPROJECTS/srvapp/md5.cpp:207: multiple definition of `MD5Update(MD5_CTX*, unsigned char*, unsigned int)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:207: first defined here

obj\Debug\md5.o: In function `Z8MD5FinalP7MD5_CTX':

D:/CBPROJECTS/srvapp/md5.cpp:239: multiple definition of `MD5Final(MD5_CTX*)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:239: first defined here

obj\Debug\md5.o: In function `Z12CalculateMD5PciS_':

D:/CBPROJECTS/srvapp/md5.cpp:273: multiple definition of `CalculateMD5(char*, int, char*)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:273: first defined here

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:5: multiple definition of `CSocket::tcpconnect(char*, int, int)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:5: first defined here

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:32: multiple definition of `CSocket::tcplisten(int, int, int)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:32: first defined here

obj\Debug\socket.o: In function `CSocket':

D:/CBPROJECTS/srvapp/socket.cpp:52: multiple definition of `CSocket::CSocket(unsigned int)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:52: first defined here

obj\Debug\socket.o: In function `CSocket':

D:/CBPROJECTS/srvapp/socket.cpp:52: multiple definition of `CSocket::CSocket(unsigned int)'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:52: first defined here

obj\Debug\socket.o: In function `CSocket':

D:/CBPROJECTS/srvapp/socket.cpp:58: multiple definition of `CSocket::CSocket()'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:58: first defined here

obj\Debug\socket.o: In function `CSocket':

D:/CBPROJECTS/srvapp/socket.cpp:58: multiple definition of `CSocket::CSocket()'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:58: first defined here

obj\Debug\socket.o: In function `~CSocket':

D:/CBPROJECTS/srvapp/socket.cpp:66: multiple definition of `CSocket::~CSocket()'

obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:66: first defined here

Process terminated with status 1 (0 minutes, 2 seconds)

50 errors, 2 warnings

Chyba, że zgodnie z oryginałem i przykładem includuję pliki *.h:

Linking console executable: bin\Debug\srvapp.exe

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:8: undefined reference to `socket@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:10: undefined reference to `gethostbyname@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:12: undefined reference to `closesocket@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:17: undefined reference to `htons@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:19: undefined reference to `connect@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:21: undefined reference to `WSAGetLastError@0'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:23: undefined reference to `closesocket@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:33: undefined reference to `socket@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:37: undefined reference to `htons@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:39: undefined reference to `bind@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:41: undefined reference to `closesocket@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:44: undefined reference to `listen@8'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:46: undefined reference to `closesocket@4'

obj\Debug\socket.o: In function `~CSocket':

D:/CBPROJECTS/srvapp/socket.cpp:69: undefined reference to `shutdown@8'

D:/CBPROJECTS/srvapp/socket.cpp:70: undefined reference to `closesocket@4'

D:/CBPROJECTS/srvapp/socket.cpp:69: undefined reference to `shutdown@8'

D:/CBPROJECTS/srvapp/socket.cpp:70: undefined reference to `closesocket@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:76: undefined reference to `accept@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:88: undefined reference to `getpeername@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:89: undefined reference to `inet_ntoa@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:95: undefined reference to `setsockopt@20'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:102: undefined reference to `recv@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:103: undefined reference to `WSAGetLastError@0'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:111: undefined reference to `ioctlsocket@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:117: undefined reference to `socket@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:121: undefined reference to `htons@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:123: undefined reference to `bind@12'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:125: undefined reference to `closesocket@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:142: undefined reference to `htons@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:143: undefined reference to `inet_addr@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:144: undefined reference to `sendto@24'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:154: undefined reference to `send@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:160: undefined reference to `send@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:162: undefined reference to `send@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:164: undefined reference to `WSAGetLastError@0'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:171: undefined reference to `recv@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:180: undefined reference to `recv@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:194: undefined reference to `recvfrom@24'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:201: undefined reference to `recv@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:203: undefined reference to `recv@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:214: undefined reference to `recv@16'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:231: undefined reference to `recvfrom@24'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:245: undefined reference to `WSAGetLastError@0'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:252: undefined reference to `gethostbyname@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:254: undefined reference to `inet_ntoa@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:259: undefined reference to `inet_ntoa@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:264: undefined reference to `ntohs@4'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:278: undefined reference to `WSACleanup@0'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:284: undefined reference to `WSAStartup@8'

obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:291: undefined reference to `gethostname@8'

Process terminated with status 1 (0 minutes, 0 seconds)

50 errors, 0 warnings

 

Ciekawe jest to, że w przykładzie podrzuconym przez Ediego jest to samo. Nawet, jeśli nic nie zmieniam.

Odnośnik do komentarza
Udostępnij na innych stronach

Pisząc najprościej:

 

Kiedy używasz #include preprocessing wkleja całą zawartość z .h do danego cpp. Pliki .h to pliki z deklaracjami a cpp z definicjami danych funkcji, klas itd(teoretycznie)

 

Zgodnie z oryginałem zaincluduj pliki .h W twoim przypadku potrzebujesz jeszcze dorzucić bibliotekę/i(undefined reference wyraźnie to pokazuje). Powinno to być gdzieś w: Project->Build options...->Linker settings Dodaj tam wymagane biblioteki"lib'y". Jeśli masz np np dll o nazwie 39dll.dll szukaj czegoś podobnego np: 39dll.lib czy jeśli są wersje debug: 39dll_d.lib.

 

edit: Musisz jeszcze zapewne dodać ścieżkę, szukaj czegoś jak: Linker settings>>Link Libraries Jak będziesz mieć problem ze znalezieniem poszperaj w necie.

Odnośnik do komentarza
Udostępnij na innych stronach

Wie ktoś może dlaczego tcpaccept zwraca -1, mimo, że klient dołącza do gry i twierdzi, że jest serwer?

Jest to funkcja, która wywołuje się co jakiś czas. np w jakiejś fixed pętli, która sprawdza czy jakiś client nie chcę się połączyć.

Jeśli napiszesz wersje z event'ami działa to na zasadzie pętli komunikatów w winapi. Zapewne zrobiłeś to w standardowy sposób, który opisałem na początku więc -1 oznacza, że żaden client nie chcę się połączyć w danej "chwili".

 

edit: Oczywiście sam system wywoływania co jakiś czas musisz napisać sam. Trzeba też przed tym ustawić socket na nasłuchiwanie.

Odnośnik do komentarza
Udostępnij na innych stronach

nope. Poszperaj i sprawdź.

Aż zajrzałem do źródeł (:

 

class CSocket
{
        // ...
public:
        // ...
    CSocket* tcpaccept(int mode);
        // ...
};

 

CSocket* CSocket::tcpaccept(int mode)
{
    if(sockid<0)return NULL;
    SOCKET sock2;
    if((sock2 = accept(sockid, (SOCKADDR *)&SenderAddr, &SenderAddrSize)) != INVALID_SOCKET)
    {
        CSocket*sockit = new CSocket(sock2);
        if(mode >=1)sockit->setsync(1);
        return sockit;
    }
    return NULL;
}

Odnośnik do komentarza
Udostępnij na innych stronach

Mówiłem o zwrocie z tcpaccept:

double tcpaccept(double sockid, double mode)
{
    CSocket*sock = (CSocket*)sockets.item((int)sockid);
    if(sock == NULL)return -1;
    CSocket*sock2 = sock->tcpaccept((int)mode);
    if(sock2 != NULL)return AddSocket(sock2);
    return -1;
}

Stoi jasno i klarownie " return -1; "

Odnośnik do komentarza
Udostępnij na innych stronach

Mówiłem o zwrocie z tcpaccept:
double tcpaccept(double sockid, double mode)
{
    CSocket*sock = (CSocket*)sockets.item((int)sockid);
    if(sock == NULL)return -1;
    CSocket*sock2 = sock->tcpaccept((int)mode);
    if(sock2 != NULL)return AddSocket(sock2);
    return -1;
}

Stoi jasno i klarownie " return -1; "

 

Ale TO jest interface dla GMa, po co się babrać z tym, jeśli masz bardziej przyjazny interface dla C++a.

 

Coś słabo zajrzałeś ;)

 

Po pierwsze pokazujesz kod z winsock a ja pisałem o(mea culpa zapomniałem o tym napisać): http://beej.us/guide/bgnet/output/html/sin...net.html#accept

 

Po drugie zerknij dokładnie czym jest typ SOCKET.

Nie z winsocka, lecz ze źródła 39DLLa, dokładniej jest to obiektowy interface ów liba.

 

Co do typu SOCKET, w tym wypadku metoda CSocket::tcpaccept zwraca wskaźnik na obiekt typu CSocket, obdarzony metodami (:

Odnośnik do komentarza
Udostępnij na innych stronach

Nie z winsocka, lecz ze źródła 39DLLa, dokładniej jest to obiektowy interface ów liba.

 

Co do typu SOCKET, w tym wypadku metoda CSocket::tcpaccept zwraca wskaźnik na obiekt typu CSocket, obdarzony metodami (:

Nie pisałem o jakimś wrapperze, który po prostu bezpośrednio wywołuje funkcje winsock'a. Nie brałem nawet pod uwagę tak wysokiego poziomu. :)

Odnośnik do komentarza
Udostępnij na innych stronach

Sockety to nie jest żadna magia, to co zmienisz będzie zmienione tak jak sam to napiszesz. To tylko przesył pakietów a co z nimi zrobisz to już twoja sprawa. Przejrzyj dobrze kod.

Jeśli w pętli masz: gracz.imie=readstring(0); to logiczne, że każdy element tablicy a raczej jego member imię będzie miał taką samą zawartość skoro przypisujesz tą samą daną: readstring(0).

Odnośnik do komentarza
Udostępnij na innych stronach

Mam w pętli, ale jest to przy odbieraniu wiadomości od gracza.

        for(i=0;i<5;i++)
        {
            if (gracz[i].jest)
            {
                while (true)
                {
                    double msg=receivemessage(gracz[i].sck,0,0);

                    if (msg<0)
                    {
                        break;
                    }
                    else if (msg==0)
                    {
                        // (...)
                    }
                    else
                    {
                        switch(int a=readbyte(0))
                        {
                            case 0:
                            gracz[i].imie=readstring(0); // (...)

Gracz dołącza do serwera, w odpowiedzi otrzymuje bajt zwrotny informujący o numerze gracza (w razie przyjęcia) bądź przepełnienia serwera. Gdy otrzyma bajt przyjęcia wysyła na serwer nazwe gracza. I tu pojawia się błąd - nazwa ta jest przypisywana wszystkim dotychczasowym graczom.

Odnośnik do komentarza
Udostępnij na innych stronach

To Ty przypisujesz wszystkim to samo. Jedna opcja jest taka, że po przyjściu paczki sam ustawiasz to dla wszystkich. One same się tak nie ustawią. W każdej paczce daj id czyli sender i na podstawie tego przetwarzaj dane lub zrób bez pętli i sprawdź czy będzie to samo.

 

edit: Zresztą nie wiem jak ten wrapper przetwarza te paczki i trudno mi ocenić czy dobrze to robisz. Sprawdź z tym co napisałem, jak dalej będzie problem napisz checknie się src tego wrapera.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...