c#socket怎样让服务器端转发数据QQA,B(a发送数据到服务端,服务端立即转发到b)

c#socket怎样让服务器端转发数据QQA,B(a发送数据到服务端,服务端立即转发到b),第1张

这个类似于聊天室的信息转发,建议建立一个数据结构,如

[SerializableAttribute]

[ComVisibleAttribute(true)]

public class SendType

{

public string SendName {getset}

public string RecName {getset}

public string Data {getset}

}

新建一个结构变量,public SendType SendData = new SendType()

SendData.SendName = "A"

SendData.RecName = "B"

SendData.Data = "Hello"

如此初始化后,将变量序列化后,提取byte[]数组直接发送,服务器再接收后再反序列化,转发。

[SerializableAttribute]

[ComVisibleAttribute(true)]

两个标记就是标记SendType类为可序列化,否则会造成不能序列化的编译错误。

我们不能保证不丢失,但是我们可以在丢失的时候再发啊,所以我们可以模范TCP协议,下面是我的想法,仅供参考:

1。服务端为每一个发送的数据加一个标识,并在发送的时候该数据加入到一个数组中,这个数组同时要记录这个数据加入的时间(之后要用到这个时间)

2。客户端收到一个数据的时候,要返回服务端一个接受成功的信息,这个信息包含数据标识,服务端收到这个信息就将数组中对应的数据删除;

3。服务器隔一段时间,就读取那个数组,判断数据加入数组的时间到当前时间的时间差,如果时间差大于某一个值(这个值要好好考虑,不过应该要大于1秒),我们就假设发送失败了,那就重发这个数据

4。重复第2和3步骤,直到所有数据发完以及数组为空,那么客户端就应该接受到所有数据了

当然这肯定会影响性能,祝你好运

先找到你自己机器的内网地址,打开cmd,输入ipconfig,查看一下IPv4地址就是你的内网IP,再登录路由器找到虚拟服务器,填写你的内网ip地址,内网端口和外网端口根据你的实际需求写,协议类型一般写all就行!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/190731.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

发表评论

登录后才能评论

评论列表(0条)

    保存