0

Hello Everyone,

I'm working on a couple of programs, client/server. I'm using winsock library to handle data transfer between the two programs. I'm having a problem when it comes to sending int values, they must be converted to (char *) since that's the data type of the buffers used in the socket Send() and Recv() functions. to elaborate, consider the following:

Client side:
-----------
unsigned char rnd[4];
int noncer =0;

// Generating a random number
RAND_pseudo_bytes(rnd,sizeof(rnd));

noncer = (int)rnd;

non1=(char*)noncer;

// These two lines produce the same output which is 1244556
cout <<"\n Noncer :" << noncer << "\n";
cout.flush();
cout <<"\n Noncer char :" << (int)non1 << "\n";
cout.flush();

SendData(Socket, non1);

Server Side:
-----------
int client_nonce;
char String[50];
String_initialization(String);

// Reading the nonce identifier
RecieveMessage(socket, String, number_of_bytes);
client_nonce = (int)String;

// this results in 1244588 !!
cout<<"\n the nonce is:"<<client_nonce <<endl;
cout.flush();

If anyone can tell me what's causing the change of data i'd really appreciate it.

Thank you all in advance.
Layla.

3
Contributors
4
Replies
5
Views
13 Years
Discussion Span
Last Post by Narue
0

Don't play around with casting like that unless you know what you're doing. Type punning can be tricky business, but barring transmission issues with your sockets, this should work:

#include <cstring>
#include <iostream>

using namespace std;

int main()
{
  int i1 = 12345;
  char buffer[sizeof ( int )];

  memcpy ( buffer, (unsigned char *)&i1, sizeof ( int ) ); // Simulate send/recv

  int *pi = (int *)buffer;
  cout<< *pi <<endl;
}
0

Hi Narue,

Thank you SO much for your help, I now get the same value at both sides :)

0

Hi I am having the same problem, but I couldnt solve it.
I need to send a CString with Unicode (16bit) to the send and recv function. Unfortunately all i get is garbage :)
Any help is welcomed

0

Don't resurrect a two year old thread to say "me too"! Start a new thread if you have a new question. Geez.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.