Channels ▼
RSS

Design

Java and C++ Socket Communication


The C++ Windows Application

Let's examine the C++ Windows server application, which also uses sockets to communicate over the network. This implementation is unaware of whether the client connecting to it is written in Java, C/C++, or any other language. The use of XML further ensures that the communication will succeed.

When the server application starts, an instance of the ServerSocket class is created (Listing Three and the complete C++ server are available here) which listens on port 8080 for new client connections. In summary, this class uses Windows Sockets to create a network socket, and then listen on it and accept new client connection requests as they arrive:


// Start winsock and create the socket
WSAStartup(...);
listenSocket = socket(...);

// TCP bind and listen 
bind( listenSocket, ... ); 
listen( listenSocket, SOMAXCONN);
	
while ( listening ) {
    // Accept a client socket (
    clientSocket = accept(listenSocket, NULL, NULL);
    // ...
}

Given that the call to accept() blocks until a new client connects, this code is executed in its own thread. Once a client does connect, the resulting code is similar to the Java socket implementation in that objects are created to handle sending data over the socket, and listening for data to arrive:


// Setup the socket sender and listener
sender = new SocketSender(clientSocket);
listener = new SocketListener(clientSocket);
listener->setSender(sender);
listener->startThread();

Again, as with the Java socket code, the SocketListener class executes the Windows sockets recv() method, which blocks until data arrives, in its own thread:


char recvbuf[BUFFERLEN];
int bytes;
while ( true ) {
    bytes = recv(clientSocket, recvbuf, BUFFERLEN, 0);
    if (bytes > 0) {
        recvbuf[bytes-1] = 0; // null terminate the string
        HandleMessage(recvbuf);
    }
}

Each request is further processed in HandleMessage(), and the appropriate response is sent back to the client:


int num = rand();
sprintf_s(buffer, "<Response><Name>RandomNumberResponse</Name>\
  <Number>%i</Number></Response>\n", num);
send( clientSocket, buffer, strlen(buffer), 0 );

Conclusion

You should now have a basic understanding of how Java and C/C++ applications can communicate via network socket programming. In fact, although the sample server application explored here uses Windows sockets, a comparable Linux application can be developed to work equally well with the Java client presented here. Combined with XML, this should provide a suitable solution in some cases. To learn about other application integration techniques, such as with JNI, JMS, or web services, take a look at the following articles:


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Video