C#udp接收数据不变化,怎么改

白三儿 2017-08-16 03:28:57

thrRecv = new Thread(ReceiveMessage);
thrRecv.Start();
}

private void ReceiveMessage(object obj) //是这里的问题吗?
{

try
{
byte[] bytRecv = sendUdpClient.Receive(ref ipend);
string message = Encoding.Unicode.GetString(
bytRecv, 0, bytRecv.Length);

for (int i = 0; i < bytRecv.Length; i++)
{
string str1 = "";

for (int lb = 0; lb <= 17; lb++)
{
str[lb] = bytRecv[i + lb];
}

for (int h = 0; h < str.Length; h++)
{
str1 += str[h].ToString("X2") + " ";
}

double fs, se, th;
fs = (bytRecv[i + 9] * 65536) + (bytRecv[i + 8] * 256) + (bytRecv[i + 7]);
se = (bytRecv[i + 12] * 65536) + (bytRecv[i + 11] * 256) + (bytRecv[i + 10]);
th = (bytRecv[i + 15] * 65536) + (bytRecv[i + 14] * 256) + (bytRecv[i + 13]);
StrR = str1;

double mn = (fs / 768000) * 360;
double nm = (se / 480000) * 360;
double mnm = (th / 480000) * 360;

sf = (float)mn;
sfs = (float)nm;
fsf = (float)mnm;

z1 = Convert.ToDouble(mn - 180).ToString("0.00");
z2 = Convert.ToDouble(nm - 180).ToString("0.00");
z3 = Convert.ToDouble(mnm - 180).ToString("0.00");
Thread.Sleep(100);


}
}

catch (Exception ex)
{
return;
}
}

就是这样,我发给他一个比如转动的命令,可是返回来的数据还是开始的数据,不清楚哪里错了,我又加延时啊,是不是函数体那里少东西,可是那线程就报错了,新手对udp了解不深求大腿
...全文
217 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
白三儿 2017-08-17
  • 打赏
  • 举报
回复
引用 10 楼 xdashewan 的回复:
[quote=引用 9 楼 qq_34802554 的回复:] 问题解决了,忘了删一个循环,不过大大多问两句,while循环里的数传出来一次就不传了什么鬼
我看你的代码没有向外传的地方,你说的“传出来”指的是什么[/quote] 我定义的str;z1;z2; z3,都是全局变量,可是只有第一次的值被传了出来,在循环里他们的数值已经改变了。 可是在timer的显示里只有第一次获取到的值。
xdashewan 2017-08-17
  • 打赏
  • 举报
回复
引用 9 楼 qq_34802554 的回复:
问题解决了,忘了删一个循环,不过大大多问两句,while循环里的数传出来一次就不传了什么鬼
我看你的代码没有向外传的地方,你说的“传出来”指的是什么
白三儿 2017-08-17
  • 打赏
  • 举报
回复
引用 8 楼 xdashewan 的回复:
[quote=引用 7 楼 qq_34802554 的回复:] 我加了个while(true),可是还是往外跳啊,走一半就跳出去了
不可能无理由跳出去,你要debug跟下代码了[/quote]
引用 8 楼 xdashewan 的回复:
[quote=引用 7 楼 qq_34802554 的回复:] 我加了个while(true),可是还是往外跳啊,走一半就跳出去了
不可能无理由跳出去,你要debug跟下代码了[/quote] 问题解决了,忘了删一个循环,不过大大多问两句,while循环里的数传出来一次就不传了什么鬼
xdashewan 2017-08-17
  • 打赏
  • 举报
回复
引用 7 楼 qq_34802554 的回复:
我加了个while(true),可是还是往外跳啊,走一半就跳出去了
不可能无理由跳出去,你要debug跟下代码了
白三儿 2017-08-17
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
[quote=引用 3 楼 qq_34802554 的回复:] 现在就是receivd只会接收第一次的数据,我不了解udp,所以希望有大神解释一下。
那你的Receive至少也要循环接收吧,网上upd的例子有的,你自己搜下[/quote] 我加了个while(true),可是还是往外跳啊,走一半就跳出去了
白三儿 2017-08-17
  • 打赏
  • 举报
回复
引用 4 楼 a755362405 的回复:
你先用UDP工具,开启一个UDP服务,然后让你程序连接,然后自己给自己的程序发不一样的数据,看程序收的数据是否正常,不正常就能确定是代码问题,正常就是返回的数据问题了。
发数据没毛病,我看过了就是循环接收那里。
xdashewan 2017-08-17
  • 打赏
  • 举报
回复
引用 3 楼 qq_34802554 的回复:
现在就是receivd只会接收第一次的数据,我不了解udp,所以希望有大神解释一下。
那你的Receive至少也要循环接收吧,网上upd的例子有的,你自己搜下
键盘敲出字 2017-08-17
  • 打赏
  • 举报
回复
你先用UDP工具,开启一个UDP服务,然后让你程序连接,然后自己给自己的程序发不一样的数据,看程序收的数据是否正常,不正常就能确定是代码问题,正常就是返回的数据问题了。
白三儿 2017-08-17
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
你怎么确定对方发你的数据就一定正确
因为我是在之前的串口调试上加的网口功能,我知道数据返回来的样子。 现在就是receivd只会接收第一次的数据,我不了解udp,所以希望有大神解释一下。
xdashewan 2017-08-17
  • 打赏
  • 举报
回复
你怎么确定对方发你的数据就一定正确
白三儿 2017-08-17
  • 打赏
  • 举报
回复
大腿大腿,你在哪里啊
白三儿 2017-08-17
  • 打赏
  • 举报
回复
引用 11 楼 qq_34802554 的回复:
[quote=引用 10 楼 xdashewan 的回复:] [quote=引用 9 楼 qq_34802554 的回复:] 问题解决了,忘了删一个循环,不过大大多问两句,while循环里的数传出来一次就不传了什么鬼
我看你的代码没有向外传的地方,你说的“传出来”指的是什么[/quote] 我定义的str;z1;z2; z3,都是全局变量,可是只有第一次的值被传了出来,在循环里他们的数值已经改变了。 可是在timer的显示里只有第一次获取到的值。[/quote] 不用啦,我延时加错地方了

110,567

社区成员

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

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

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