请问如何将下列程序中的upd包组建成用java发送的UDP#define OCISS_IM_EXT_CMD_SMS_CALL 129typedef struct {
unsigned char iOffset;
unsigned char iCmdID;
unsigned short iMesgID;
}PDU_head;#define OCISS_FLOAT_STRING_SIZE 16
#define OCISS_MAX_SUB_PIN_SIZE 16
#define OCISS_MAX_EXT_NO 8
#define OCISS_NCC_MAX_DIGITS 31 typedef struct
{
int m_nIMserverId; //IM server authenticate.
int m_nGatewayId; //tell the gateway id that this cmd designates to.
int m_nIMcallId; //the call id applied from IM server for smd,sms call.
int m_nRadServerId; //IM tell gateway which radius to send cdr
int m_nSrcTrunkId; //src trunk id.
int m_nSrcLineGrade; //src line grade.
int m_nSrcCCodeLen; //src country code length *** newly added here.
int m_nDnisTrunkId; //dest trunk id.
int m_nDnisLineGrade; //dnis line grade.
int m_nDnisCCodeLen; //dnis country code length.***newly added here.
int m_nUnitSeconds; //call charge unit seconds.
int m_nMaxCallDurMin; //maximum call duration for this company. char m_fszSrcRate [OCISS_FLOAT_STRING_SIZE+1]; //call back src no
char m_fszDnisRate[OCISS_FLOAT_STRING_SIZE+1]; //call back dest no
char m_fszCreditLeft[OCISS_FLOAT_STRING_SIZE+1]; //user account credit left. char m_szUserPin[OCISS_MAX_SUB_PIN_SIZE+1];
char m_szSrcNo [OCISS_NCC_MAX_DIGITS+1];
char m_szSrcPrefix[OCISS_MAX_EXT_NO+1];
char m_szDnisNo[OCISS_NCC_MAX_DIGITS+1];
char m_szDnisPrefix[OCISS_MAX_EXT_NO+1];
}OCISS_IM_SMD_CALL_INIT;
unsigned char iOffset;
unsigned char iCmdID;
unsigned short iMesgID;
}PDU_head;#define OCISS_FLOAT_STRING_SIZE 16
#define OCISS_MAX_SUB_PIN_SIZE 16
#define OCISS_MAX_EXT_NO 8
#define OCISS_NCC_MAX_DIGITS 31 typedef struct
{
int m_nIMserverId; //IM server authenticate.
int m_nGatewayId; //tell the gateway id that this cmd designates to.
int m_nIMcallId; //the call id applied from IM server for smd,sms call.
int m_nRadServerId; //IM tell gateway which radius to send cdr
int m_nSrcTrunkId; //src trunk id.
int m_nSrcLineGrade; //src line grade.
int m_nSrcCCodeLen; //src country code length *** newly added here.
int m_nDnisTrunkId; //dest trunk id.
int m_nDnisLineGrade; //dnis line grade.
int m_nDnisCCodeLen; //dnis country code length.***newly added here.
int m_nUnitSeconds; //call charge unit seconds.
int m_nMaxCallDurMin; //maximum call duration for this company. char m_fszSrcRate [OCISS_FLOAT_STRING_SIZE+1]; //call back src no
char m_fszDnisRate[OCISS_FLOAT_STRING_SIZE+1]; //call back dest no
char m_fszCreditLeft[OCISS_FLOAT_STRING_SIZE+1]; //user account credit left. char m_szUserPin[OCISS_MAX_SUB_PIN_SIZE+1];
char m_szSrcNo [OCISS_NCC_MAX_DIGITS+1];
char m_szSrcPrefix[OCISS_MAX_EXT_NO+1];
char m_szDnisNo[OCISS_NCC_MAX_DIGITS+1];
char m_szDnisPrefix[OCISS_MAX_EXT_NO+1];
}OCISS_IM_SMD_CALL_INIT;
解决方案 »
- Java多线程1—程序、进程、线程比较
- 高分求答,jxl 操作EXCEL
- 帮忙看看哪里错啦 新手新手。。
- 如何保证一个程序在一天运行中产生一个中奖随机数?
- 关于serversocket监听!
- 张孝祥IT课堂-黄金套装(带源码)下载地址(bt)
- 如何将web服务器上的文件保存到本地?
- 关于tcp连接时候,println()和readLine() 的问题
- 为什么命令行窗口那么快就消失了啊?我根本没法看我的程序啊!55555~~~~~
- 怎么样在指定的位置下载文件,如**。ZIP的前2K数据我不想要,只要2K以后的,怎么办?
- 散了200分了,竟然没人解答一个简单的udp包问题,郁闷!!恳求帮助啊
- 头痛啊,大家来帮帮我!!解决马上送分!!是关于使用UDP发送流并解释流的问题
http://tech.sina.com.cn/c/2002-08-14/15097.html
...大把。:)
import java.lang.Thread;
import java.net.*;
import java.io.*;
public class UDPClient extends Thread{
private DatagramSocket s;
private InetAddress hostAddress;
private byte[] buf=new byte[1000];
private DatagramPacket dp=new DatagramPacket(buf,buf.length);
private int id;
public UDPClient(int identifier){
id=identifier;
try{
s=new DatagramSocket();
hostAddress=InetAddress.getByName("localhost");
}catch(UnknownHostException e){
System.err.println("Cannot find host");
System.exit(1);
}catch(SocketException e){
System.err.println("Can't open Socket");
e.printStackTrace();
System.exit(1);
}
}
public void run(){
try{
for(int i=0;i<1;i++){//消息数
String outMessage="Client #"+
id+",message#"+i;
s.send(Dgram.toDatagram(outMessage,hostAddress,UDPServer.INPORT));
s.receive(dp);
String rcvd="Client #"+id+",rcvd from "+
dp.getAddress()+","+
dp.getPort()+":"+
Dgram.toString(dp);
System.out.println(rcvd);
}
}catch(IOException e){
e.printStackTrace();
System.exit(1);
}
}
public static void main(String[] args){
for (int i=0;i<1;i++)//客户数量
new UDPClient(i).start();
}
}//Dgram.java 数据报格式
import java.net.*;public class Dgram {
public static DatagramPacket toDatagram(
String s,InetAddress destIA,int destPort){
byte[] buf=new byte[s.length()+1];
s.getBytes(0,s.length(),buf,0);
return new DatagramPacket(buf,buf.length,destIA,destPort);
}
public static String toString(DatagramPacket p){
return new String(p.getData(),0,p.getLength());
}
}
byte iOffset;
byte iCmdID;
char iMesgID;
}public class OCISS_IM_SMD_CALL_INIT
{
int m_nIMserverId; //IM server authenticate.
int m_nGatewayId; //tell the gateway id that this cmd designates to.
int m_nIMcallId; //the call id applied from IM server for smd,sms call.
int m_nRadServerId; //IM tell gateway which radius to send cdr
int m_nSrcTrunkId; //src trunk id.
int m_nSrcLineGrade; //src line grade.
int m_nSrcCCodeLen; //src country code length *** newly added here.
int m_nDnisTrunkId; //dest trunk id.
int m_nDnisLineGrade; //dnis line grade.
int m_nDnisCCodeLen; //dnis country code length.***newly added here.
int m_nUnitSeconds; //call charge unit seconds.
int m_nMaxCallDurMin; //maximum call duration for this company. byte m_fszSrcRate [SizeConstants.OCISS_FLOAT_STRING_SIZE+1]; //call back src no
byte m_fszDnisRate[SizeConstants.OCISS_FLOAT_STRING_SIZE+1]; //call back dest no
byte m_fszCreditLeft[SizeConstants.OCISS_FLOAT_STRING_SIZE+1]; //user account credit left. byte m_szUserPin[SizeConstants.OCISS_MAX_SUB_PIN_SIZE+1];
byte m_szSrcNo [SizeConstants.OCISS_NCC_MAX_DIGITS+1];
byte m_szSrcPrefix[SizeConstants.OCISS_MAX_EXT_NO+1];
byte m_szDnisNo[SizeConstants.OCISS_NCC_MAX_DIGITS+1];
byte m_szDnisPrefix[SizeConstants.OCISS_MAX_EXT_NO+1];
}public class SizeConstants {
public static final byte OCISS_FLOAT_STRING_SIZE = 255;
...
}结构写成类定义,为常量专门定义一个类。UDP 我完全不熟悉,TCP 也只知道一点点而已,至于 UDP 是怎么发送的,以及接收后怎么需要的转换操作我就都不清楚了。还没学呢。:)