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
...全文
267 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
plushenkolxx 2012-06-26
  • 打赏
  • 举报
回复

procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;AData: TBytes;
ABinding: TIdSocketHandle);
var
S: string;
begin
S := BytesToString(AData, TEncoding.Unicode);
ShowMessage(S);
end;
plushenkolxx 2012-06-26
  • 打赏
  • 举报
回复
C# 客户端

byte[] data = Encoding.Unicode.GetBytes(strdata);
//改为
byte[] data = Encoding.UTF8.GetBytes(strdata);

Delphi 服务端

procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;AData: TBytes;
ABinding: TIdSocketHandle);
var
S: string;
begin
S := BytesToString(AData);
ShowMessage(S);
end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧