sinat_29302687
sinat_29302687
2016-06-06 15:17
采纳率: 100%
浏览 1.5k

只有5个客户端的c#的网络编程

我要做一个只有5个客户端的网络编程软件,客户端用c#,服务端用c++,我不知道用什么网络模型,尤其是客户端在给服务端发不同的服务消息,服务端怎么判断并分类处理?要不要用线程啊,有不有完整的项目代码,我是新手,不大会!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • huang461072830
    小程序员 2016-06-07 02:17
    已采纳
            模型选择:
            网络模型的选择需要衡量开发成本、项目的压力、业务需求等,按照你说的只有5个客户端,那么即使跑视频压力也不大,所以更多要考虑的是业务需求和开发成本。
            看你的业务需求,5个客户端是并行的还是串行的,一般来说,这种的业务都需并行的,那么久考虑下业务处理时间了,每个业务需要处理的耗时是多少,这个决定是否可以用非阻塞。
            socket按照开发成本可大致分为 1多线程---》2回调---》3完成端口
            最简单的就是直接跑跑多线程了,这种的开发周期最短,不过性能也最差,占用资源较多,第二种的是回调,这种开发较快,占用资源也比较少,基本能满足你的需求。至于完成端口这东西性能最优,开发成本也最大,如果不是要秀技术,不推荐在这个项目上用。
            判断分类处理:
            在socket通讯中,所有的操作都是根据报文标识来做对应操作的,不必纠结于怎么判断并分类处理,一般来说一条tcp的协议包含以下部分
            报头 长度 命令关键字 主体内容 校验 报尾
            根据具体的业务又可以增加或者删减部分内容,这个报文是完全由你自己定义的,而在程序中的做法是:
            1、首先受到网络数据的时候存入一个byte[]中,也就是socket缓冲区,收到数据最初是存在这里的,我们的操作也是从这个缓冲区取数据进行处理。
            2、取出数据后使用报文解析器解析报文,报文解析器是一个自定义的所有用户共用的类或方法,他的作用就是将byte[]转为协议文本,然后判断协议的完整性,(有时候会再判断协议的准确性,也就是判断校验位)然后根据报文中的命令关键字去调用对应的处理方法。
            3、在处理方法中就可以对收到的协议数据做相应的处理了,业务基本是封装在这部分的。
            这是最基本的一个报文处理过程,一般我们会根据项目情况做一些调整,调整的话上面的处理逻辑也不会更改,我比较经常用到的是命令模式和生产者消费者模式来处理报文。
    
    点赞 评论
  • caozhy

    比如说你有一个电饭锅可以烧3个人吃的饭。现在你只要烧一个人吃的饭,你照样用它,而不是去买一个小的电饭煲,那反倒没有必要。相同的道理,5个客户端和n个客户端没有什么不同。
    你可以使用socket通讯,最简单的,使用udp协议,不同的消息,你可以自己定义一种简单的协议,比如说,消息发送格式为 用户名||消息类型||正文 。服务器对此进行解析就可以了。

    点赞 评论

相关推荐