c#客户端发送udp数据到delphi服务器端,c#数据报如何打包发送过去
tofy 2012-06-21 06:58:07 说明:有个delphi服务程序,会检测其他机器发送过来的udp数据,然后做个显示,目前有个delphi客服端发送能成功接收并显示,但本人写了个c#的客户端程序,能接收到,但显示数据不对,请高手看看。
首先请看delphi客户端程序代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, StdCtrls,
IdUDPServer, IdSocketHandle;
const PACKET_SIZE = 4096;
const HOST_PORT = 9527;
type
PPACK_INFO = ^TPACK_INFO;
TPACK_INFO = record //字节存储采用主机顺序
mainid: DWORD; //主消息号
subid: DWORD; //子消息号
roomip: DWORD; //保存此消息是哪个包厢IP发出
reserved: array[0..3] of DWORD; //预留
datalen: DWORD; //正文长度
data: array[0..PACKET_SIZE-32-1] of char; //正文内容
end;
//发送数据函数 向服务器192.168.1.11端口9527发送主消息:0x01,子消息:0x01,包厢ip:192.168.1.205
var
strServerIP: string;
strRoomIP: string;
pack_info: TPACK_INFO;
begin
strServerIP := trim(192.168.1.11);//服务器IP
strRoomIP := trim(192.168.1.205);//包厢IP
ZeroMemory(@pack_info, sizeof(TPACK_INFO));
pack_info.mainid := $01;//主消息
pack_info.subid := $01;//子消息
CopyMemory(@pack_info.data[0], @strRoomIP[1], Length(strRoomIP));
pack_info.datalen := Length(pack_info.data);
IdUDPClient1.Port := HOST_PORT;
IdUDPClient1.Host := strServerIP;
IdUDPClient1.SendBuffer(pack_info, 32+pack_info.datalen);
end;
服务器端接收到数据,并显示为:[01][01]192.168.1.205
问题来来了,如何写一个c#客户端程序向服务器192.168.1.11端口9527发送主消息:0x01,子消息:0x01,包厢ip:192.168.1.205 然后显示为:[01][01]192.168.1.205
本人写的c# 客户端代码:
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace client
{
public partial class send : Form
{
private UdpClient Client;//定义客户端,网络终端
private IPEndPoint rePoint;
const int HOST_PORT = 9527; //服务器端口
public send()
{
InitializeComponent();
}
private void btnOpen_Click(object sender, EventArgs e)
{
Client = new UdpClient();//本机监听端口确定
IPAddress adress = IPAddress.Parse("192.168.1.11");//务器IP
rePoint = new IPEndPoint(adress, HOST_PORT);
string strdata = "[0x01][0x01]192.168.1.205";
byte[] data = Encoding.Unicode.GetBytes(strdata);
Client.Send(data, data.Length, rePoint);
}
}
}
改代码调试,然后发送:
delphi服务程序也是能接收到数据的,但是数据显示为:[230023][4F004C]0 而不是:[01][01]192.168.1.205
现在搞不明白c#那个数据报data应该如何写,才能让delphi服务器接收到并解释为:[01][01]192.168.1.205