<p dir="ltr">Besides the zeromq usage issue(s), you have charset encoding mismatch.</p>
<p dir="ltr">outData.getBytes() returns your string in UTF-16 encoding. When you receive this byte buffer in your CPP server, you just pass it to constructor of std::string that accepts it until the first 0 byte. In case of latin text encoded in UTF-16, either the first byte, or the second byte will be 0 (depending on endianness).</p>

<p dir="ltr">You should<br>
 1) use outData.getBytes("UTF-8"), and<br>
 2) take length fom the byte buffer, not String.</p>
<div class="gmail_quote">11.02.2013 10:40 пользователь "Deepak Jharodia" <<a href="mailto:deepakjharodia@gmail.com">deepakjharodia@gmail.com</a>> написал:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>Hi,</div><div><br></div><div>I'm starting with ZMQ and created my first program. The client is in Java and server in CPP, using respective bindings. I have three questions:</div><div>1) I want client to connect only if server is running(on that IP). Right now, client connects even if I give a random IP.</div>


<div>2) I want to start server and *then* start client and send requests. However, if I do this nothing happens. But if I start client first and send a request and then start server, it receives a packet.</div><div>3) The way I’m trying to extract message, I get first character of message correct. Rest is all garbage. Am I doing something wrong?</div>


<div><br></div><div>Client code:</div><div>ZMQ.Context context = ZMQ.context(1);</div><div>socket = context.socket(ZMQ.REQ);</div><div>try {<span style="white-space:pre-wrap">     </span>socket.connect("tcp://<a href="http://10.199.88.134:6669" target="_blank">10.199.88.134:6669</a>");</div>


<div>     } catch (ZMQException e) {</div><div>System.out.println(e.getMessage());</div><div>     }</div><div>String outData = new String();</div><div>outData = "list";</div><div>socket.send(outData.getBytes(), outData.length());</div>


<div><br></div><div><br></div><div><br></div><div>Server code:</div><div>zmq::context_t context (1);</div><div>zmq::socket_t socket (context, ZMQ_REQ);</div><div>try {</div><div>   socket.bind ("tcp://<a href="http://10.199.88.133:6669" target="_blank">10.199.88.133:6669</a>");</div>


<div>} catch(zmq::error_t e) {</div><div>   return 0;</div><div>}</div><div>zmq::message_t request;</div><div>while(1) {</div><div>   std::cout << "Waiting for packet.." << std::endl;</div><div><br>

</div>
<div>   int size = -2;</div><div>   try {</div><div>      size = socket.recv (&request);</div><div>   } catch(zmq::error_t e) {</div><div>      return 0;</div><div>   }</div><div>   if (size == -1) {</div><div>      return 0;</div>


<div>   } else {</div><div>      cout << "Message length: "<<size << endl;}</div><div>   char *message = (char*)malloc (size + 1);</div><div>   memcpy (message, request.data(), size);</div><div>


   std::string message_string(message);</div><div>   cout << message_string << endl;</div><div><br></div><div>   string outData = "OK";</div><div>   int length = outData.length();</div><div>   zmq::message_t reply (length);</div>


<div>   memcpy ((void *) reply.data (), outData.c_str(), strlen(outData.c_str())+1);</div><div>   socket.send (request);</div><div>}</div><div><br></div><div><br></div><div>Cheers,</div><div>Deepak</div></div>

<br>_______________________________________________<br>
zeromq-dev mailing list<br>
<a href="mailto:zeromq-dev@lists.zeromq.org">zeromq-dev@lists.zeromq.org</a><br>
<a href="http://lists.zeromq.org/mailman/listinfo/zeromq-dev" target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a><br>
<br></blockquote></div>