Avatar billede Daniel.E Praktikant
10. september 2002 - 23:09 Der er 6 kommentarer og
1 løsning

socket

Yo

Jeg vil godt starte på noget socket programmering i C ++. er der nogle som har et godt link til en side med en toturial, som er god ??

:)

Mvh

vb2
Avatar billede soreno Praktikant
11. september 2002 - 08:01 #1
Winsock Programmer's FAQ:
http://tangentsoft.net/wskfaq/
Avatar billede ladyhawke Novice
11. september 2002 - 08:01 #2
Avatar billede Daniel.E Praktikant
11. september 2002 - 11:32 #3
Jeg har kigget på elle links, i nu 3 timer..Jeg fatter minus af det hele...Kender i ikke en link hvor der står meget præcist skrevet hvordan man gør, og hvilkde værktæjer man skal bruge. Og hvor koden skal stå, i H filen eller i Cpp filen..Det kan jeg heller ikke se...

Det lyder sikkert dumt, men jeg er bare ny inden for ordet "socket".

Mvh
vb2
Avatar billede soepro Nybegynder
11. september 2002 - 13:56 #4
Jeg fandt følgende eksempel på http://www.sockaddr.com/ :

//
// Client.cpp
//
// Extremely simple, stream client example.
// Works in conjunction with Server.cpp.
//
// The program attempts to connect to the server and port
// specified on the command line. The Server program prints
// the needed information when it is started. Once connected,
// the program sends data to the server, waits for a response
// and then exits.
//
// Compile and link with wsock32.lib
//
// Pass the server name and port number on the command line.
//
// Example: Client MyMachineName 2000
//
#include <stdio.h>
#include <winsock.h>

// Function prototype
void StreamClient(char *szServer, short nPort);

// Helper macro for displaying errors
#define PRINTERROR(s)    \
        fprintf(stderr,"\n%: %d\n", s, WSAGetLastError())

////////////////////////////////////////////////////////////

void main(int argc, char **argv)
{
    WORD wVersionRequested = MAKEWORD(1,1);
    WSADATA wsaData;
    int nRet;
    short nPort;

    //
    // Check for the host and port arguments
    //
    if (argc != 3)
    {
        fprintf(stderr,"\nSyntax: client ServerName PortNumber\n");
        return;
    }

    nPort = atoi(argv[2]);


    //
    // Initialize WinSock and check the version
    //
    nRet = WSAStartup(wVersionRequested, &wsaData);
    if (wsaData.wVersion != wVersionRequested)
    {   
        fprintf(stderr,"\n Wrong version\n");
        return;
    }


    //
    // Go do the stuff a stream client does
    //
    StreamClient(argv[1], nPort);

   
    //
    // Release WinSock
    //
    WSACleanup();
}

////////////////////////////////////////////////////////////

void StreamClient(char *szServer, short nPort)
{
    printf("\nStream Client connecting to server: %s on port: %d",
                szServer, nPort);

    //
    // Find the server
    //
    LPHOSTENT lpHostEntry;

    lpHostEntry = gethostbyname(szServer);
    if (lpHostEntry == NULL)
    {
        PRINTERROR("gethostbyname()");
        return;
    }

    //
    // Create a TCP/IP stream socket
    //
    SOCKET    theSocket;

    theSocket = socket(AF_INET,                // Address family
                      SOCK_STREAM,            // Socket type
                      IPPROTO_TCP);        // Protocol
    if (theSocket == INVALID_SOCKET)
    {
        PRINTERROR("socket()");
        return;
    }

    //
    // Fill in the address structure
    //
    SOCKADDR_IN saServer;

    saServer.sin_family = AF_INET;
    saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
                                        // ^ Server's address
    saServer.sin_port = htons(nPort);    // Port number from command line

    //
    // connect to the server
    //
    int nRet;

    nRet = connect(theSocket,                // Socket
                  (LPSOCKADDR)&saServer,    // Server address
                  sizeof(struct sockaddr));// Length of server address structure
    if (nRet == SOCKET_ERROR)
    {
        PRINTERROR("socket()");
        closesocket(theSocket);
        return;
    }


    //
    // Send data to the server
    //
    char szBuf[256];

    strcpy(szBuf, "From the Client");
    nRet = send(theSocket,                // Connected socket
                szBuf,                    // Data buffer
                strlen(szBuf),            // Length of data
                0);                        // Flags
    if (nRet == SOCKET_ERROR)
    {
        PRINTERROR("send()");
        closesocket(theSocket);
        return;
    }


    //
    // Wait for a reply
    //
    nRet = recv(theSocket,                // Connected socket
                szBuf,                    // Receive buffer
                sizeof(szBuf),            // Size of receive buffer
                0);                        // Flags
    if (nRet == SOCKET_ERROR)
    {
        PRINTERROR("recv()");
        closesocket(theSocket);
        return;
    }


    //
    // Display the received data
    //
    printf("\nData received: %s", szBuf);


    closesocket(theSocket);
    return;
}

//
// Client.cpp
//
// Extremely simple, stream client example.
// Works in conjunction with Server.cpp.
//
// The program attempts to connect to the server and port
// specified on the command line. The Server program prints
// the needed information when it is started. Once connected,
// the program sends data to the server, waits for a response
// and then exits.
//
// Compile and link with wsock32.lib
//
// Pass the server name and port number on the command line.
//
// Example: Client MyMachineName 2000
//
#include <stdio.h>
#include <winsock.h>

// Function prototype
void StreamClient(char *szServer, short nPort);

// Helper macro for displaying errors
#define PRINTERROR(s)    \
        fprintf(stderr,"\n%: %d\n", s, WSAGetLastError())

////////////////////////////////////////////////////////////

void main(int argc, char **argv)
{
    WORD wVersionRequested = MAKEWORD(1,1);
    WSADATA wsaData;
    int nRet;
    short nPort;

    //
    // Check for the host and port arguments
    //
    if (argc != 3)
    {
        fprintf(stderr,"\nSyntax: client ServerName PortNumber\n");
        return;
    }

    nPort = atoi(argv[2]);


    //
    // Initialize WinSock and check the version
    //
    nRet = WSAStartup(wVersionRequested, &wsaData);
    if (wsaData.wVersion != wVersionRequested)
    {   
        fprintf(stderr,"\n Wrong version\n");
        return;
    }


    //
    // Go do the stuff a stream client does
    //
    StreamClient(argv[1], nPort);

   
    //
    // Release WinSock
    //
    WSACleanup();
}

////////////////////////////////////////////////////////////

void StreamClient(char *szServer, short nPort)
{
    printf("\nStream Client connecting to server: %s on port: %d",
                szServer, nPort);

    //
    // Find the server
    //
    LPHOSTENT lpHostEntry;

    lpHostEntry = gethostbyname(szServer);
    if (lpHostEntry == NULL)
    {
        PRINTERROR("gethostbyname()");
        return;
    }

    //
    // Create a TCP/IP stream socket
    //
    SOCKET    theSocket;

    theSocket = socket(AF_INET,                // Address family
                      SOCK_STREAM,            // Socket type
                      IPPROTO_TCP);        // Protocol
    if (theSocket == INVALID_SOCKET)
    {
        PRINTERROR("socket()");
        return;
    }

    //
    // Fill in the address structure
    //
    SOCKADDR_IN saServer;

    saServer.sin_family = AF_INET;
    saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
                                        // ^ Server's address
    saServer.sin_port = htons(nPort);    // Port number from command line

    //
    // connect to the server
    //
    int nRet;

    nRet = connect(theSocket,                // Socket
                  (LPSOCKADDR)&saServer,    // Server address
                  sizeof(struct sockaddr));// Length of server address structure
    if (nRet == SOCKET_ERROR)
    {
        PRINTERROR("socket()");
        closesocket(theSocket);
        return;
    }


    //
    // Send data to the server
    //
    char szBuf[256];

    strcpy(szBuf, "From the Client");
    nRet = send(theSocket,                // Connected socket
                szBuf,                    // Data buffer
                strlen(szBuf),            // Length of data
                0);                        // Flags
    if (nRet == SOCKET_ERROR)
    {
        PRINTERROR("send()");
        closesocket(theSocket);
        return;
    }


    //
    // Wait for a reply
    //
    nRet = recv(theSocket,                // Connected socket
                szBuf,                    // Receive buffer
                sizeof(szBuf),            // Size of receive buffer
                0);                        // Flags
    if (nRet == SOCKET_ERROR)
    {
        PRINTERROR("recv()");
        closesocket(theSocket);
        return;
    }


    //
    // Display the received data
    //
    printf("\nData received: %s", szBuf);


    closesocket(theSocket);
    return;
}

Jeg har kompileret begge programmer., og de virker helt fint.
Avatar billede soepro Nybegynder
16. september 2002 - 08:13 #5
vb2 >> Soreno's link var måske godt nok når alt kom til alt ?
Avatar billede Daniel.E Praktikant
18. september 2002 - 22:23 #6
Soepro>>

Nej det var hans kode :)
Avatar billede soreno Praktikant
18. september 2002 - 22:27 #7
muligvis der er opstået en misforståelse ??
jeg husker ikke at have postet noget kode ?

soreno != soepro
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester