我写的是网关。
我也是同样的任务,交流,已经卡壳了两天了。我用java写。有点基本思路:
step1,要把图片和铃声文件由原来的midi或bmp转换成二进制文件(有专门的转换工具)并分割成多个文件。
step2,从数据库中找到一个文件id,从某一个目录读取相同id的文件,以字节流的方式读取。
setp3  转换成unicode的16进制编码。
step4  按一定算法,每个字节中加入一个%号。这是能够让手机能够识辨。
setp5  然后写发送方法。就象发普通文本短信一样提交到短信网关。问题,我读出的二进制文件乱码,没有找到相关转换成0xE4,之类的字节流。
找的相关资料:
http://www.fanqiang.com/a4/b5/20011231/08100027.html
http://www-900.ibm.com/developerWorks/cn/java/java_chinese/index.shtml
http://www.linuxforum.net/books/UTF-8-Unicode.html
共享,共同解决。
有段php源码
// 执行发送 logo ring 动作
function SendLogoRing($username, $password, $from, $to, $fid, $free)
{
global $dbCursor;
$sendtype = 1;
global $dbConnection; $tmpcursor = ora_open($dbConnection) or die("open oracle database"); ///////////////////////////////////////////////////////////////////////////
// 查询图片的规格
$dbQuery = "select ffeecode, ftype, fkeyword from tbl_tpls_spec where fspecid=(select fspecid from tbl_tpls_sample where fid=$fid)";
//die($dbQuery);
ora_parse($dbCursor, $dbQuery) or die("$dbQuery");
ora_exec($dbCursor) or die("$dbQuery");
if (ora_fetch($dbCursor))
{
$feecode = ora_getcolumn($dbCursor, 0);
$type = ora_getcolumn($dbCursor, 1);
$keyword = ora_getcolumn($dbCursor, 2);
}
else
{
return false;
} if ($free) // 如果是免费
{
$keyword = "DXMF";
$feecode = "000000";
$sendtype = 2;
} ///////////////////////////////////////////////////////////////////////////
// 根据类型选择 dcs
switch ($type)
{
case "nokia": $dcs = 4; break;
case "siemens": $dcs = 3; break;
case "motorola": $dcs = 0; break;
default : $dcs = 4;
} ///////////////////////////////////////////////////////////////////////////
// 查询总文件数
$dbQuery = "select count(ffilename) from tbl_tpls_binary where fsampleid=$fid ";
// die($dbQuery);
ora_parse($dbCursor, $dbQuery) or die("$dbQuery");
ora_exec($dbCursor) or die("$dbQuery");
if (ora_fetch($dbCursor))
{
$nCount = ora_getcolumn($dbCursor, 0);
}// Ora_Close($dbCursor);
// echo $keyword;
// echo $nCount; ///////////////////////////////////////////////////////////////////////////
// 查询并发送短消息
$dbQuery = "select ffilename, ftype from tbl_tpls_binary where fsampleid=$fid order by ffilename";
// die($dbQuery);
ora_parse($tmpcursor, $dbQuery) or die("$dbQuery");
ora_exec($tmpcursor) or die("$dbQuery");

$send = true;
$files = 0;
while (ora_fetch($tmpcursor))
{
$files++; // 计数,发送了几个文件。 $ffilename= ora_getcolumn($tmpcursor, 0);
$ftype= ora_getcolumn($tmpcursor, 1);
$filepath = "../../logoring/" . $ffilename;
// echo $filepath;
$fd = fopen( $filepath, "r" );
if (!$fd)
return false; $data = fread($fd, filesize($filepath));
$htext = "";
for ($i = 0; $i < strlen($data); $i++)
{
$ctext = dechex(ord(substr($data, $i, 1)));
if (strlen($ctext) == 1)
{
$ctext = "0" . $ctext;
}
$ctext = "%" . $ctext; $htext .= $ctext;
}
fclose( $fd ); if ($files == $nCount)
{
// 最后一条计费
$send = $send & SendBinaryMessage($username, $password, $from, $to, $dcs, $sendtype, $keyword, $feecode, $htext);
}
else
{
// 其余免费
$keyword = "DXMF";
$send = $send & SendBinaryMessage($username, $password, $from, $to, $dcs, $sendtype, $keyword, $feecode, $htext);
}
}
UpdateSample($fid);
return $send;
}弯路:首先我在读文件的过程中,我采用了直接读midi 结果出现读文件异常,无法读出文件,把import javax.sound.midi;引入。