(C#)关于UDP协议解析收到的数据包后如何通过手动发送信息返回客户端

zhit_z 2018-08-01 10:03:20

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDP
{
class Program
{

private byte[] data;

public static string OX23 { get; private set; }
public static object Private { get; private set; }

static void Main(string[] args)
{

int recv;
byte[] data = new byte[1024];

//得到本机IP,设置TCP端口号
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("120.76.202.110"), 8001);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//绑定网络地址
newsock.Bind(ip);
Console.WriteLine("This is a Server, host name is {0}", Dns.GetHostName());
//等待客户机连接
Console.WriteLine("Waiting for a client");
//得到客户机IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 8900);
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
//客户机连接成功后,发送信息
string welcome = "你好 ! ";
//字符串与字节数组相互转换
data = Encoding.ASCII.GetBytes(welcome);
//发送信息
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)
{
data = new byte[1024];
//发送接受信息
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);


int[] s = new int[10];
for (int i = 0; i < 10; i++)
{
s[i] = data[i];
}
if ((s[0] == 0x48) && (s[1] == 0x46) && (s[2] == 0x55) && (s[3] == 0x54) && (s[9] == 0x23))
{
Console.WriteLine("接收到正确的数据包");
Console.WriteLine("功能码是" + s[5]);
Console.WriteLine("调光等级" + s[7]);
Console.WriteLine("定时数为: " + s[8]);

if (s[4] == 0x00)
{
Console.WriteLine("接入1号设备");
}
else if (s[4] == 0x01)
{
Console.WriteLine("接入2号设备");
}
else
{
Console.WriteLine("接入3号设备");
}



if (s[6] == 0x00)
{
Console.WriteLine("关闭开关");
}
else
{
Console.WriteLine("闭合开关");
}

}
else
{
Console.WriteLine("数据包错误");
}




}


}




}
} (数据包的格式为“HFUT+地址+功能码+开关+调光系数+定时数+#”返回要求开关状态与接收到的相反,调光系数变大,请问该如何改程序,谢谢)
...全文
314 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhit_z 2018-08-02
  • 打赏
  • 举报
回复
大哥你好,你给的答案之前的代码就是这个,但是他返回的是客户端发过来的数据包,我现在要求在闭合时返回“请断开开关”以及调光系数。请问怎么改
xian_wwq 2018-08-02
  • 打赏
  • 举报
回复
服务器给客户端发送数据
通过socket就能完成
UDP通讯就是SendTo,例如:
newsock.SendTo(data, recv, SocketFlags.None, Remote);
socket只认byte[]
数据解析是业务层要做的事情

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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