Socket网络框架C#

本文探讨了两个Socket框架在网络传输中文时遇到的问题及解决方案。针对EMTASS2_1和ZYSocketSuper3.1框架,作者详细记录了在实际应用过程中如何解决中文乱码、服务端列表赋值及客户端断开连接等问题。
摘要由CSDN通过智能技术生成

最近一个项目因为要用到Socket传输问题,自己比较懒,没有去写。直接上网 search一下了,找到两个比较简单的

 

 EMTASS2_1  原文地址:http://blog.csdn.net/hulihui/archive/2008/10/27/3158613.aspx

 ZYSocketSuper 3.1 SOCKET框架  原文地址:http://blog.csdn.net/luyikk/archive/2010/12/26/6099337.aspx

 

 根据他们各处带的实例,用了一天时间改成我想要的效果,发现了几个问题。

 第一个网络传输服务框架

     1、最主要的原因就是不能传输中文,

        解决编码问题 把Encoding.ASCII.GetByte....,   改成Encoding.Default.GetBytes...

       貌似可以了,但是在回传到客户端的时候就会有错误,也就是SendDatagram()这个过程出错,也就是这个过程  Encoding.Default.GetBytes(datagramText, 0, byteLength1, m_sendBuffer, bufferOffset);这个问题就是搞晕了我半天,最后换成别的方法改好,后面写出。

    2、在服务端存储的列表中,TSessionCoreInfo中的Name属性不知道放在哪赋值,比方说客户端的Socket,我想对应一个名称,如客户端1.这样服务端根据这些key,value值这样的关系,显示各种状态(可以是图片通断状态)能够快速定义找到,但是不知道在哪传值。原方法是用ID来对应

    3、自定义扩展的方法比较好,这样实合不同的方式来储存数据,采用消息传输各种结果。

第二个网络传输服务框架

    1、如果是服务器断开(异常关闭),客户端就无法再次连上了。

    2、客户端没有找到自己disconnect方法。

    3、服务端没有判断在一个服务器上只能启一个,这个可以自己改(开源嘛,呵)

    4、支持实体序列化传输,使用问题集合,方法集合等。

    5、其实功能还是挺强的,支持加密传输内容

以上只是俺初玩的感觉,可能是没有深入,原作者都没有这些问题。

最后还是选择了第一个来操作,因为我需要改变消息格式就可以实现不同的结果,以后只是改消息就行了,再改一个解析消息类。

 

 修改第一个框架中文的问题

   在作网络通讯中,被这个转换Byte搞显了,因为要加一个缓冲存储概念,所以两具byte[] 相合并,并取值就出现问题了。

   原来方法 是用:Encoding.Default.GetBytes(datagramText, 0, byteLength1, m_sendBuffer, bufferOffset);

   其中:datagrameText为编码内容: <ok,客户端1,这是内容方式,也可以是XML编码等>

              byteLenght1:为上面内容转换成byte[]后的长度

              m_sendBuffer:为缓冲区

             bufferOffset:为缓冲区开始从哪插入值

想要的结果是:如果m_senBuffer中无值,则是从0处(bufferOffset可以知道)插入值,否则从相应的索引处插入值,可是每次运行到此处就是报错,提示“对应的索引和值在指定的范围内”,就是没搞明白,研究了半天,改成一个笨方法来实现。

                       byte[] newBuffer = Encoding.Default.GetBytes(datagramText);
                        //与缓冲区数据合并,如果有的话 ,取消原来的方法 2011-5-18                      
                        newBuffer.CopyTo(m_sendBuffer, bufferOffset);

       倒是调试过去了,还是没找到上面的问题所有。

   但要是没有中文就可以过去,其中含有中文就错,原则上无论是多少字节组,我只是合并,应该问题不大才对呀。郁闷透顶。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值