.[ ČeskéHry.cz ].
Vícevláknový server a client - potebuji navod
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 17:23:19    Předmět: Odpovědět s citátem

kód:
#undef UNICODE

#define WIN32_LEAN_AND_MEAN

#include <WinSock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <WinError.h>
#include "StdAfx.h"
#include <stdio.h>

// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Ws2_32.dll")

// #pragma comment (lib, "Mswsock.lib")



#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
using namespace std;
int __cdecl main(void)
{
    WSADATA wsaData;
    int iResult;

    SOCKET ListenSocket = INVALID_SOCKET;
    SOCKET ClientSocket = INVALID_SOCKET;

    struct addrinfo *result = NULL;
    struct addrinfo hints;

    int iSendResult;
    char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;
   
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed with error: %d\n", iResult);
        return 1;
    }

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed with error: %d\n", iResult);
        WSACleanup();
        return 1;
    }

    // Create a SOCKET for connecting to server
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) {
        printf("socket failed with error: %ld\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }

    // Setup the TCP listening socket
    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    if (iResult == SOCKET_ERROR) {
        printf("bind failed with error: %d\n", WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) {
        printf("listen failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // No longer need server socket
    closesocket(ListenSocket);

    // Receive until the peer shuts down the connection
    do {

        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
        if (iResult > 0) {
            printf("Bytes received: %d\n", iResult);

        // Echo the buffer back to the sender
            iSendResult = send( ClientSocket, recvbuf, iResult, 0 );
            if (iSendResult == SOCKET_ERROR) {
                printf("send failed with error: %d\n", WSAGetLastError());
                closesocket(ClientSocket);
                WSACleanup();
                return 1;
            }
            printf("Bytes sent: %d\n", iSendResult);
        }
        else if (iResult == 0)
            printf("Connection closing...\n");
        else  {
            printf("recv failed with error: %d\n", WSAGetLastError());
            closesocket(ClientSocket);
            WSACleanup();
            return 1;
        }

    } while (iResult > 0);

    // shutdown the connection since we're done
    iResult = shutdown(ClientSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed with error: %d\n", WSAGetLastError());
        closesocket(ClientSocket);
        WSACleanup();
        return 1;
    }

    // cleanup
    closesocket(ClientSocket);
    WSACleanup();

    return 0;
}

Pridal jsem tu knihovnu i naklikanim a chyby se nezmenily.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vlatom



Založen: 29. 03. 2011
Příspěvky: 19

PříspěvekZaslal: 2. říjen 2011, 17:23:34    Předmět: Odpovědět s citátem

mival napsal:
... protoze anglicky moc nemumim... Very Happy


Tak se uč, to je základ Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vlatom



Založen: 29. 03. 2011
Příspěvky: 19

PříspěvekZaslal: 2. říjen 2011, 17:26:18    Předmět: Odpovědět s citátem

Zkus includnout Ws2tcpip.h místo ws2tcpip.h
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 17:28:19    Předmět: Odpovědět s citátem

Je mi 13 tak doufam ze me to ve skole nauci.

P.S. dat tam presnej nazev nepomohlo. Tu knihovnu to skoro urcite naincludovalo, takze myslim ze v tom problem neni.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 17:30:43    Předmět: Odpovědět s citátem

perry napsal:
Programovat cokoli stylem copy&paste je největší "prasečina" co jde... Nic se nenaučíš, většinou to nefunguje....

Ja se tak ucil PHP a vse co jsem zkopiroval jsem vetsinou pak hned pochopil a brzy se to naucil.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 2. říjen 2011, 17:40:50    Předmět: Odpovědět s citátem

mival napsal:
perry napsal:
Programovat cokoli stylem copy&paste je největší "prasečina" co jde... Nic se nenaučíš, většinou to nefunguje....

Ja se tak ucil PHP a vse co jsem zkopiroval jsem vetsinou pak hned pochopil a brzy se to naucil.


Aha, divil jsem se, odkud pocházejí tvé mistrovské dovednosti...
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vlatom



Založen: 29. 03. 2011
Příspěvky: 19

PříspěvekZaslal: 2. říjen 2011, 17:52:16    Předmět: Odpovědět s citátem

A jestli ti můžu poradit, tak zkus něco jednoduššího třeba Deplhi (na to sem chodil jako malej do kroužku Very Happy ) nebo C# je určitě víc začátečník friendly (z mého pohledu)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 2. říjen 2011, 17:57:37    Předmět: Odpovědět s citátem

mival napsal:
Je to na me moc tezke, protoze anglicky moc nemumim. Very Happy


Pokud chces programovat neco slozitejsiho nez je Pong, tak se anglicky budes muset naucit perfektne, veskere materialy jsou v anglictine.

Jen sem tam nekdo neco prelozi, popr. napise neco v cestine, ale bez anglictiny se nehnes.

EDIT: ugh, clovek si otevre stranku s prispevky, zajde uvarit caj, napise odpoved a mezitim je tam uz cela stranka jinych odpovedi Very Happy


Naposledy upravil satik dne 2. říjen 2011, 17:59:51, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 2. říjen 2011, 17:59:33    Předmět: Odpovědět s citátem

Bez angličtiny se programovat nedá. Sice je tu pár cz tutoriálů, ale nepokryjí vše.. a navíc jakmile se něco podělá (jako že jo), tak už chybu v češtině nenajdeš.

mival napsal:
perry napsal:
Programovat cokoli stylem copy&paste je největší "prasečina" co jde... Nic se nenaučíš, většinou to nefunguje....

Ja se tak ucil PHP a vse co jsem zkopiroval jsem vetsinou pak hned pochopil a brzy se to naucil.


No.. v PHP muzes nahodne mlatit hlavou do klavesnice... a vysledek bude na 90% spustitelný a něco vykoná Very Happy Very Happy
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 18:07:10    Předmět: Odpovědět s citátem

To je psycho, neco opravim aby to fungovalo (podle ruznych rad na anglickych forech) a dopadne to tak ze to zahlasi dalsi chyby Sad.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 18:12:50    Předmět: Odpovědět s citátem

Chyby:
2 unresolved externals
unresolved external symbol "int __stdcall getaddrinfo(char const *,char const *,struct addrinfo const *,struct addrinfo * *)" (?getaddrinfo@@YGHPBD0PBUaddrinfo@@PAPAU1@@Z) referenced in function _main
unresolved external symbol "void __cdecl freeaddrinfo(struct addrinfo *)" (?freeaddrinfo@@YAXPAUaddrinfo@@@Z) referenced in function _main

declaration is incompatible with "void __stdcall freeaddrinfo(PADDRINFOA pAddrInfo)"
kód:
#undef UNICODE

#define WIN32_LEAN_AND_MEAN

#include <WinSock2.h>
#include <Ws2tcpip.h>
#include <stdlib.h>
#include <WinError.h>
#include "StdAfx.h"
#include <stdio.h>

// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "ws2_32.dll")

 //#pragma comment (lib, "Mswsock.lib")
void freeaddrinfo(
  __in  struct addrinfo *ai
);

int WSAAPI getaddrinfo(
  _In_opt_  PCSTR pNodeName,
  _In_opt_  PCSTR pServiceName,
  _In_opt_  const ADDRINFOA *pHints,
  _Out_     PADDRINFOA *ppResult
);
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
using namespace std;
int __cdecl main(void)
{
    WSADATA wsaData;
    int iResult;

    SOCKET ListenSocket = INVALID_SOCKET;
    SOCKET ClientSocket = INVALID_SOCKET;

    struct addrinfo *result = NULL;
    struct addrinfo hints;

    int iSendResult;
    char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;
   
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed with error: %d\n", iResult);
        return 1;
    }

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed with error: %d\n", iResult);
        WSACleanup();
        return 1;
    }

    // Create a SOCKET for connecting to server
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) {
        printf("socket failed with error: %ld\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }

    // Setup the TCP listening socket
    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    if (iResult == SOCKET_ERROR) {
        printf("bind failed with error: %d\n", WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) {
        printf("listen failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // No longer need server socket
    closesocket(ListenSocket);

    // Receive until the peer shuts down the connection
    do {

        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
        if (iResult > 0) {
            printf("Bytes received: %d\n", iResult);

        // Echo the buffer back to the sender
            iSendResult = send( ClientSocket, recvbuf, iResult, 0 );
            if (iSendResult == SOCKET_ERROR) {
                printf("send failed with error: %d\n", WSAGetLastError());
                closesocket(ClientSocket);
                WSACleanup();
                return 1;
            }
            printf("Bytes sent: %d\n", iSendResult);
        }
        else if (iResult == 0)
            printf("Connection closing...\n");
        else  {
            printf("recv failed with error: %d\n", WSAGetLastError());
            closesocket(ClientSocket);
            WSACleanup();
            return 1;
        }

    } while (iResult > 0);

    // shutdown the connection since we're done
    iResult = shutdown(ClientSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed with error: %d\n", WSAGetLastError());
        closesocket(ClientSocket);
        WSACleanup();
        return 1;
    }

    // cleanup
    closesocket(ClientSocket);
    WSACleanup();

    return 0;
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 18:17:57    Předmět: Odpovědět s citátem

Je mi celkem jedno jak to bude fungovat ale potrebuji server a client abych proste mohl pres net mezi uzivateli takto posilat data.

Kdybych mel server a client hotovy, uz bych konecne mohl delat co chci.
A opravdu se omlouvam za svou hloupost ale dost blbe se neco hleda atd. kdyz tu AJ moc dobre neumite. Sad
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 2. říjen 2011, 18:30:56    Předmět: Odpovědět s citátem

mival napsal:
... protoze anglicky moc nemumim... Very Happy

mival napsal:
Je mi 13 tak doufam ze me to ve skole nauci.


Rozhodně nepočítej s tim ze ONI tě to naučí. Mušís sám chtít snažit se aktvině zapojovat. Mám to z vlastní zkušenosti - na gymplu mě skoro nic nenaučili protože jsem se tehdy moc učit nechtěl. Nejvíc se naučís, že prostě buděš angličtinu používat (číst anglický články, psát do diskuzí atd.), ač třeba ze začátku blbě a těžko, ale časem se to zlepší.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mival



Založen: 28. 08. 2010
Příspěvky: 85

PříspěvekZaslal: 2. říjen 2011, 19:03:52    Předmět: Odpovědět s citátem

SERVER:
kód:
#include <winsock2.h>
#include <iostream>
#include "stdafx.h"
using namespace std;


int StartServerListening(unsigned short port);

void EndServer(int socket);


int main()
{

    int serverSocket; // Used to listen

    serverSocket = StartServerListening(7700);

   
    if (serverSocket == -1)
    {
        cout << "Boze vse jde spatne!!\n";
        return 1;
    }

    int clientSocket; // Socket to accept
    clientSocket = accept(serverSocket, 0, 0);


    if (clientSocket == SOCKET_ERROR)
    {
        cout << "Server: Heh, Taught him a lesson on acceptence...\n";
    }


    int nBytes;
   

    #define MAX_MESSAGE_SIZE 100 // We need a big enough buffer for our maximum message size.

    char buffer[MAX_MESSAGE_SIZE];

    unsigned long messageSize; // We need a variable for our size.


    nBytes = recv(clientSocket, (char*)&messageSize, sizeof(messageSize), 0);

    if (nBytes == SOCKET_ERROR)
    {
        cout << "Server: I failed you master! Nothing was recieved!\n";
    }

    messageSize = ntohl(messageSize);    // Remember to fix our byte ordering since this is a number

    nBytes = recv(clientSocket, buffer, messageSize, 0);

    if (nBytes == SOCKET_ERROR)
    {
        cout << "Server: Recv Failed!\n";
    }

   
    buffer[messageSize] = ' '; // Place the terminator in the string 'messageSize'

    cout << "Server: Someone said : " << buffer << endl;


   // closesocket(clientSocket);

  // EndServer(serverSocket);

    cout << "Server: Press any key to turn me off ...\n";
    getchar();
   
    return 0;
}


// -----------------------------------------------------------------------------------
// StartServerListening() - a function to startup winsock, and open a socket for listening

int StartServerListening(unsigned short port)
{
    int error;

    WSAData wsaData;

    if ((error = WSAStartup(MAKEWORD(2, 2), &wsaData)) == SOCKET_ERROR) {
        cout << "Server: WinSock is being a bitch, smack it a few times eh?\n";
        return -1;
    }

    int mySocket = socket(AF_INET, SOCK_STREAM, 0);

    if (mySocket == SOCKET_ERROR)
    {
        cout << "Server: Something went terribly wrong, the socket wont open!\n";
        return -1;
    }

    struct sockaddr_in server;

    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr = INADDR_ANY;

    if (bind(mySocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
    {
        cout << "Server: It wont let me bind correctly.\n";
        closesocket(mySocket);
        return -1;
    }

    if (listen(mySocket, 5) == SOCKET_ERROR)
    {
        cout << "Server: Damnit.. im deaf... Listening Failed!\n";
        closesocket(mySocket);
        return -1;

    }

    cout << "Server: Im up and running boss!\n";

    return mySocket;
}


// -----------------------------------------------------------------------------------
// EndServer() - a function to shutdown a socket and clean up winsock

void EndServer(int socket)
{
    closesocket(socket);

    WSACleanup();

    cout << "Server: Remember the Alamo!\n";
}


Client
kód:
// Enathoria Client.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#define _CRT_SECURE_NO_DEPRECATE
int StartClient(unsigned short port, const char* serverName);
void EndClient(int clientSocket);



#include <winsock2.h>
#include <iostream>
using namespace std;



int main()
{
    cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
         << "Client: And we Are done!\n"
         << "Client: Celestialkey's Tutorial\n\n"
         << "Client: Thanks for following the tutorial to the end\n"
          << "Client: if you want more good tutorials such as this, join me on\n"
         << "Client: http://Celestial.muux.org\n\n\n\n\n\n";

    // This simply changes the colors to make it look cooler
    HANDLE hConsole;
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, 2);
    // -----------------------------------------------------
    int mySocket;
    mySocket = StartClient(7700, "localhost");

    if (mySocket == -1)
    {
        EndClient(mySocket);
        return 1;
    }
    int nBytes;
    #define MAX_MESSAGE_SIZE 4096
    char buffer[MAX_MESSAGE_SIZE];
    cout << "Client: Type what you want to send, if you want to exit, type 'exit'\nClient: LETS DO IT!\nClient: > ";
    for (;;)
    {
        gets(buffer);
        if (strcmp(buffer, "exit") == 0)
        {
            break;
        }
        unsigned long messageSize = strlen(buffer);
        messageSize = htonl(messageSize);
        if ((nBytes = send(mySocket, (char*)&messageSize, sizeof(messageSize), 0)) == SOCKET_ERROR)
        {
            cout << "Client: Send Failed Sir!\n";
        }
        messageSize = ntohl(messageSize);
        if ((nBytes = send(mySocket, buffer, messageSize, 0)) == SOCKET_ERROR)
        {
            cout << "Client: It wont go through sir!!\n";
        }
        cout << "\n>";
    }
    EndClient(mySocket);
    return 0;
}

int StartClient(unsigned short port, const char* serverName)
{
    int error;
    WSAData wsaData;
    if ((error = WSAStartup(MAKEWORD(2, 2), &wsaData)) == SOCKET_ERROR)
    {
        cout << "Client: Winsock is being a bitch!\n";
        return -1;
    }
    int mySocket = socket(AF_INET, SOCK_STREAM, 0);
    if (mySocket == SOCKET_ERROR)
    {
        cout << "Client: The Socket is stuck sir! It wont open!\n";
        return -1;
    }
    struct hostent *host_entry;
    if ((host_entry = gethostbyname(serverName)) == NULL)
    {
        cout << "Client: I'm lost =.=; Wheres the host?\n";
    }
    struct sockaddr_in server;
    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr = *(unsigned long*) host_entry->h_addr;
    if (connect(mySocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
    {
        cout << "Client: ****ing server wont let me connect dude.\n";
    }
    cout << "Client: I-AM-RUNNING!\n";

    return mySocket;
}


void EndClient(int clientSocket)
{
    closesocket(clientSocket);
    WSACleanup();
    cout << "Client: Dont rush me damnit, im shutting down at my own damn pace. -.-;\n";
}


Prosim vas moc, upravte to prosim tak aby se mohlo pripojit kolik chce clientu a aby client videl zpravy ostatnich. Moc vas o to zadam.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 2. říjen 2011, 19:06:52    Předmět: Odpovědět s citátem

uiii napsal:
mival napsal:
... protoze anglicky moc nemumim... Very Happy

mival napsal:
Je mi 13 tak doufam ze me to ve skole nauci.


Rozhodně nepočítej s tim ze ONI tě to naučí. Mušís sám chtít snažit se aktvině zapojovat. Mám to z vlastní zkušenosti - na gymplu mě skoro nic nenaučili protože jsem se tehdy moc učit nechtěl. Nejvíc se naučís, že prostě buděš angličtinu používat (číst anglický články, psát do diskuzí atd.), ač třeba ze začátku blbě a těžko, ale časem se to zlepší.

Přesně tak. Já jsem to měl podobně. Angličtina na základce za moc nestála a já jsem nebyl schopný se sám něco přiučit... Pak se to změnilo na střední... Jak jsem začal sledovat The IT Crowd, Black Books a The Big Bang Theory + louskání anglických tutoriálů, má úroveň angličtiny (alespoň na úrovni čtení) se mnohonásobně zlepšila. Jak už bylo psáno...všechno je to o tom chtít a začínat od jednoduchých věcí...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6  Další
Strana 2 z 6

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna