public void run()
	{
		int numbytes;
		StringBuilder total_data = new StringBuilder();

		BufferedInputStream sockin = null;
		try 
		{
			sockin = new BufferedInputStream(client_sock.getInputStream());
		}
		catch (IOException e) 
		{
			MsgDumperCmnDef.WriteErrorFormatSyslog(__FUNC__(), __LINE__(), "Error occurs, due to: %s", e.toString());
			return;
		}

		MsgDumperCmnDef.WriteDebugFormatSyslog(__FUNC__(), __LINE__(), "The worker thread of receiving data daemon is running......");
		while (true)
		{
			byte[] buf = new byte[BUF_SIZE];
			try 
			{
				numbytes = sockin.read(buf);

				if (numbytes == -1)
				{
					MsgDumperCmnDef.WriteErrorFormatSyslog(__FUNC__(), __LINE__(), "Fail to read the data...");
					break;
				}

				total_data.append(new String(buf, 0, numbytes));
// If no data is received..., maybe the connection is closed by the client
				if (total_data.length() == 0)
				{
					MsgDumperCmnDef.WriteErrorFormatSyslog(__FUNC__(), __LINE__(), "The connection is closed by the client");
					break;
				}
// Check if the data is completely sent from the remote site
				int beg_pos = total_data.indexOf(end_of_packet);
				if (beg_pos == -1)
				{
					MsgDumperCmnDef.WriteDebugFormatSyslog(__FUNC__(), __LINE__(), "The data[%s] is NOT sent completely", total_data.toString());
					continue;
				}

// Show the data read from the remote site
				MsgDumperCmnDef.WriteDebugFormatSyslog(__FUNC__(), __LINE__(), total_data.substring(0, beg_pos));
// Remove the data which is already shown
				total_data = new StringBuilder(total_data.toString().substring(beg_pos + end_of_packet_size));
			}
			catch (IOException e) 
			{
				MsgDumperCmnDef.WriteErrorFormatSyslog(__FUNC__(), __LINE__(), "Fail to read data, due to: %s", e.toString());
				break;
			}
		}

		MsgDumperCmnDef.WriteDebugSyslog(__FUNC__(), __LINE__(), "The worker thread of reading socket is going to die......");
	}