Search code examples
javac++pointerscharsend

Converting pointer to string and send as char array not working properly


I have a problem with sending directory names over socket from my C++ client, to my Java server.

Sending ordinary messages like "hello world", works great , but the following doesn't and I can not figure out what the problem is:

char const * files = ffd.cFileName; // get directory name

            string str(files, 0, strlen(files)); // convert pointer to string, right?

            char mess[str.size()];
            strcpy(mess, str.c_str()); // make char array :)

            cout << "Send file: " << mess << " with strlen: " << strlen(mess) << " and sizeof: " << sizeof(mess) << endl;

            int sent = 0;
            if ((sent = send(connectSocket, mess, sizeof(mess), 0)) == SOCKET_ERROR)
            {
                closesocket(connectSocket);
                WSACleanup();
                connectToServer();
            }

The java server just receives the directory names like this:

wam
p
Win
dow
s
Win
dow
s.o
ld
wxW
idg
ets

I can not understand what I'm missing because I have tried every possible way to do this and the C++ client prints like:

"Send file: windows with strlen: 7 and sizeof: 7"

I do not think that the java server is the problem since I can receive normal strings and messages perfectly, but anyway here is the JAVA code:

is = socket.getInputStream();
byteArray = new byteArray[1024]; 
    while (true) {
                c = is.read(byteArray, 0, byteArray.length);
                String recv = new String(byteArray, 0, c);
                System.out.println(recv);
                if (recv.equals("<EOF>")){
                    break;
                }
                list.add(recv);
            } 

If you request something else or anything just leave a comment and I will fix it.


Solution

  • I solved it, Just added byteArray = new byte[1024]; and now it works:

             while (true) {
                byteArray = new byte[1024]; // I ADDED THIS AND NOW THE JAVA SERVER RECEIVES IT CORRECTLY!
    
                c = is.read(byteArray, 0, byteArray.length);
                recv = new String(byteArray, 0, c);
    
    
                System.out.println(recv);
                if (recv.equals("<EOF>")){
                    break;
                }
                list.add(recv);
            }