日期:2014-05-17  浏览次数:20945 次

C# socket数据传递 多线程延迟
socket 和 多线程方面  我是新手。
现在在做这样一个模仿《你画我猜》的程序
我要达到的效果为:

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

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

现在遇到2个问题:

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


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


------解决方案--------------------
1、你可以用一个定时器,每过一个时间t取一次坐标,两次取值中间的点直接用直线代替。鼠标慢线条就准确,鼠标很快的时候用户自己估计也不知道画成什么样子,所以可以用直线代替。当然t给定一个合适的值的话,线条还是会比较好看的。
3、转成bytes数组传输,用Bitconvert转。
------解决方案--------------------
假如不是很差的网络,你就一个坐标发一次,不用担心会慢,这点数据根本不算什么
------解决方案--------------------
引用:
Bitconverter 只能转 基本数据类型。  
List<Point> 不能啊

序列化成字节数组发送
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);
}