C# socket数据传递 多线程延迟

l_lcn 2012-06-01 02:15:19
socket 和 多线程方面 我是新手。
现在在做这样一个模仿《你画我猜》的程序
我要达到的效果为:

我在A用户端画图,另外一用户可以同时看到。

我现在是这样做的:在一个用户端 A ,我通过一个单独的线程,捕捉鼠标轨迹,将捕捉到的轨迹存入一个 List<Point>.然后发送给其他用户端

现在遇到2个问题:

第一个问题是 在A端 界面绘制 图形的时候,如果鼠标移动太快,绘制会有延迟。
第二个问题是 我想通过socket UDP协议把 List<Point>. 发送(或者 组播)到 用户端B。
现在我只会用socket进行简单的连接,字符串传输。我想过在 A端 把 List<Point>.封装成object,然后
tostring(),发送到B端 再拆封。


另外,如果谁有好一点的建议也可以发表。 先谢谢大家!

...全文
323 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sspuking2360 2013-04-28
  • 打赏
  • 举报
回复
不知楼主现在的这个你画我猜做的怎么样了,方便的话传我一份,谢谢了。
__天涯寻梦 2012-06-02
  • 打赏
  • 举报
回复
我不知道你说的延迟是什么意思,有些坐标漏掉?
__天涯寻梦 2012-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
Bitconverter 只能转 基本数据类型。
List<Point> 不能啊
[/Quote]
序列化成字节数组发送
BinaryFormatter bf = new BinaryFormatter();
using(MemoryStream stream=new MemoryStream())
{
bf.Serialize(stream, 坐标列表);
byte[] result = stream.ToArray();
}

反序列化
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream(接收到的字节数组))
{
List<Point> result = (List<Point>)bf.Deserialize(stream);
}
l_lcn 2012-06-02
  • 打赏
  • 举报
回复
Bitconverter 只能转 基本数据类型。
List<Point> 不能啊
l_lcn 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

假如不是很差的网络,你就一个坐标发一次,不用担心会慢,这点数据根本不算什么
[/Quote]

可能你理解错了, 这是2个问题。
一个问题是 多线程里面。的延迟、

另外一个是 socket 数据传输的问题
__天涯寻梦 2012-06-01
  • 打赏
  • 举报
回复
假如不是很差的网络,你就一个坐标发一次,不用担心会慢,这点数据根本不算什么
l_lcn 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1、你可以用一个定时器,每过一个时间t取一次坐标,两次取值中间的点直接用直线代替。鼠标慢线条就准确,鼠标很快的时候用户自己估计也不知道画成什么样子,所以可以用直线代替。当然t给定一个合适的值的话,线条还是会比较好看的。
3、转成bytes数组传输,用Bitconvert转。
[/Quote]
谢谢你的第一条建议。
转bytes 我知道。 Bitconvert 转了,在B端如何 转回 list<point> 或者 point[]
hard9999 2012-06-01
  • 打赏
  • 举报
回复
1、你可以用一个定时器,每过一个时间t取一次坐标,两次取值中间的点直接用直线代替。鼠标慢线条就准确,鼠标很快的时候用户自己估计也不知道画成什么样子,所以可以用直线代替。当然t给定一个合适的值的话,线条还是会比较好看的。
3、转成bytes数组传输,用Bitconvert转。

111,126

社区成员

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

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

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