Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » SOCKETS hiiilfe ;)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
16.05.2006, 18:05 Uhr
~Ganael
Gast


hey, ganz simple :

zwei Sockets...
server socket ist in listen()
client connectet sich
...wird vom Server acceptiert...
Server sendet sein Socket int...


C++:
//server
if (g==2) {
    listen(sock, 0);

    int sinsize = sizeof(csin);
    csock = accept(sock,(SOCKADDR *)&csin,&sinsize);
    if( csock != INVALID_SOCKET)
    {
        send(csock,message,port,0);
    }

    
}



message is

C++:
   char message[1024]= /*den integer vom server socket...*/ ;



...schon klar, type char kann keine int beinhalten...

doch die send() function mag nur char...
ALSO WIE WANDLE ICH MEINEN SOCKET VON INT IN CHAR UND ZURÜCK?!?

bräucht sowas in sowenig zeilen wie geht...
bitte bitte bitte helft mir^^

PS: nutze Visual c++ / console application


Bearbeitung:

Die Code tags bitte nicht vergessen das nächste mal ...


Dieser Post wurde am 16.05.2006 um 20:11 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.05.2006, 18:11 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Um einen string in eine Zahl umzuwandeln, nimm atoi() aus <cstdlib>
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.05.2006, 18:14 Uhr
~Ganael
Gast


danke, ich probiers
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.05.2006, 18:35 Uhr
~Ganael
Gast


des klappt, aber andersrum net :


C++:
int dec,sign;
char message[1024]= fcvt ( sock,3, &dec, &sign );



mag er net...
wie dann ?


Bearbeitung:

!!! LETZTE WARNUNG - CODETAGS SELBST BENUTZEN !!!


Dieser Post wurde am 16.05.2006 um 20:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.05.2006, 20:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
machs so:


C++:
int bla = -5;
send(csock, &bla, sizeof(int), 0);



das schickt dann deinen int "binär" also normal 4 bytes, empfangen dann schon so wie du es gemacht hast, nur eben


C++:
int bla = 0;
recv(sock, &bla, sizeof(int), 0);
// ergibt hier dann wieder bla = -5


--
class God : public ChuckNorris { };

Dieser Post wurde am 16.05.2006 um 20:10 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.05.2006, 18:40 Uhr
Ganael



loescht einfach den post...
ich schreib ihn neu MIT Tags :

cool, danke, habs aber auch mit den funktionen geschaft... musste nur etwas rumprobieren... werds beim nächsten mal probieren

hier noch ein lustiges Problem :


C++:
//client
if (g==1) {

connect(sock,(SOCKADDR *)&sin,sizeof(sin));
char* recmessage=reccord();
csock= atoi (recmessage);

//the server has send his socket integer...
//saved under csock...

if( csock != INVALID_SOCKET)
{
int a =send(csock,"Hi I am the Client",port,0);
cout << a<<"<greetings send>\n";
}
}



so, why the hell a = -1 (error during send() or so...)
...the socket csock is a valid socket, the message is a simple string, and the port is defined at the beginning, he was used to connect... he cant be the origine for that error
...should I change the last parameter? (and how)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.05.2006, 17:21 Uhr
Ganael



kann mir niemand weiterhelfen?
ich brauche dies um weiterzukommen, saß schon stunden dran nur um nen einfachen string vom Client zum Server zu schicken, aber selbst mit dem Server Socket giebts nen Fehler beim Senden, keine Ahnung wiso...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.05.2006, 20:57 Uhr
Ganael



last try ...
please help me pleeeeeease
I am not sure how to use the function send() :

[cpp]
//Client
char message[]="Hi I am the Client";
int a = send(csock,message,strlen(message),0);
[\cpp]

should csock be the socket of my client, or my server...

if I use the client socket, the function returns 50 -> so he managed to send to somewhere/someone...
if I use the server socket, the function returns -1 -> an error occured somewhere

I just want to send my message from the Client to the Server...

so it don'T make any sense to use the Client socket, I dont want to send from Client to Client...

but why is there such error?

please help
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.05.2006, 22:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,


Code:
server:
|-create
|-bind
|-listen
|-accept
   |- client1
       |-recv/send
   |- client2
       |-recv/send
   |- client3
       |-recv/send

client:
|-create
|-connect
|-recv/send



you have to seperate strictly client and server
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.05.2006, 14:25 Uhr
Ganael



puh, I find the error myself...
my client couldn't send because I thought I must use the Server Socket in the send() function!
there should be the socket of the client himself!

...as I started with sockets I saw that the Server was using the Client socket to send to the client, so I thought the Client should use the Server socket to send to the server...

...thats why I send the server socket int from the server to the client...

here the correct code :

erstmal mein Socket.h :

C++:
//Socket init

SOCKET sock;                            //variable du type Socket
SOCKADDR_IN sin;
SOCKET csock;
SOCKADDR_IN csin;                       //informations techniques du socket
int port = 50;//2388
char hostIP[]="127.0.0.1";//"62.214.238.147"

//CLIENT
void openclientsock ()
{
WSADATA WSAData;                        //Windows Socket Data, ou un truc du genre...
WSAStartup(MAKEWORD(2,0),&WSAData);     //la version utilisée, ici v.2

sock = socket(AF_INET,SOCK_STREAM,0);   //Cré un Socket appelé "sock"  
sin.sin_addr.s_addr = inet_addr(hostIP);          //l'addresse du server
sin.sin_family      = AF_INET;                    //type de Socket
sin.sin_port        = htons(port);                //Port
}


//SERVER
void openserversock ()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);

sock = socket(AF_INET, SOCK_STREAM, 0);

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

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
}


//CLOSE SOCKET
void closesock ()
{
    closesocket(sock);         //Protokol qui ferme le socket...
    WSACleanup();              //..et le WSA
}

//EMPFANGEN
char* reccord()
{
    char buffer[1024]={0};
    int bytes;
    
    bytes = recv(csock, buffer, sizeof(buffer) - 1, 0);
    if (bytes == -1) {
        //cout << "\n    !couldn't retreave the message!\n";
        system ("pause");
    } else if(bytes >0) {
    buffer[bytes] = '\0';
    cout << "\nreceived message : "<<buffer <<endl;
    }
    return (buffer);
}

//Senden
void sende(const char* mess)
{
    int bytes;
    bytes = send(csock,mess,strlen(mess),0);
    if (bytes == -1) {
        system ("cls");
        cout << "\n    !couldn't send the message!\n";
    } else {
        cout << "\nmessage send : "<<mess <<endl;
    }
}



und hier das Programm selbst :


C++:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <winsock2.h>
#include <cstdlib>
#include <string>
#pragma comment(lib, "ws2_32.lib")
using namespace std;

#include "Socket.h"

void main()
{

int g=0,conn=0;

while (1!=g && 2!=g) {
cout << "please choose between\n ";
cout << "1. Open Client\n 2. Open Server\n";
cin >> g;
}


if (1==g || 2==g) {
switch (g){
    case 1:
        cout << "Client activated\n";
        openclientsock();break;
    case 2:
        cout << "Server activated\n";
        openserversock();break;
} }

//client
if (g==1) {
    csock=sock;
    connect(sock,(SOCKADDR *)&sin,sizeof(sin));
    reccord();
    if( sock != INVALID_SOCKET)
    {
        cout << "connection engaged\n";
        sende("Hi I am the Client\0");
        reccord();
    }
}


//server
if (g==2) {
    listen(sock, 0);

    int sinsize = sizeof(csin);
    csock = accept(sock,(SOCKADDR *)&csin,&sinsize);
    if( csock != INVALID_SOCKET)
    {
        int dec, sign;
        string Port = fcvt (port,0, &dec, &sign );
        string HI = "hi, you are now conected at ";
        string HI_IP_Port = HI + hostIP + " on port : " + Port;

        sende(HI_IP_Port.c_str());
        cout << "connection engaged\n";
    }
    //get messages --> //dialogue
    while (true) {
        char* recmessage=reccord();
        if (strlen(recmessage)>0) {
            char message[]="Hallo Client";
            sende(message);
        }
    }
}


closesock();
system ("pause");
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: