zoukankan      html  css  js  c++  java
  • surpersocket客户端

    大家在学习surpersocket时候,都是拿telnet测试的吧,是不是没有 客户端 而感到 烦恼。

    我么,就抽了一点时间 写了个简单的客户端代码。

    针对QuickStart的 1-Basic 第一部分那 几个  服务器demo

    客户端也是c#写的,然后没啥大功能,就是 配合 服务器 粘包的方式,粘包拆包。

    你们也可以 在 服务器上 for循环 send数据,看看客户端 是不是分包了。

    链接:http://pan.baidu.com/s/1sjxDKQT 密码:xpeh

    写在最后,很多人 学程序,心态都不好,头脑不好不要紧,但千万别厌恶世界,也许你花费了大量时间,不及我 三分钟学习。

    但千万 不要嫉妒,凡事量力而行就好。

    博客我会继续 更精彩的文章和代码给大家 。

    核心代码:

    using UnityEngine;
    using System.Collections;
    using System.ComponentModel;
    using System.Text;
    using System.Net.Sockets;
    using System.Net;
    using System.Threading;
    using System.Collections.Generic;
    using LitJson;
    
    public class SocketModel
    { 
        public Socket tcpClient;
        public Queue<JsonData> JsonList; 
        public void ClientSend()
        { 
            JsonList = new Queue<JsonData>();
            //主机IP
            IPEndPoint serverIp = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 3686);
            tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
          
            tcpClient.BeginConnect(serverIp, asyncResult =>
            {
                try
                {
                    tcpClient.EndConnect(asyncResult);
                }
                catch
                {
                    JsonData message = new JsonData();
                    message["type"] = "1";
                    message["wifi"] = "false";
                    tcpClient.Close();
                    JsonList.Enqueue(message);///////////////// 加入队列  服务器连接失败   
                }
    
                ReceiveMessage(tcpClient);
            }, null);
        }
        private StringBuilder stringBuilder = new StringBuilder();             //这个是用来保存:接收到了的,但是还没有结束的消息
        private void ReceiveMessage(object state)            //这个函数会被以线程方式运行
        {
            string terminateString = "
    ";
            Socket tcpClient = (Socket)state;
            while (true)
            {
                try
                {
                    byte[] buffer = new byte[1024];  //buffer大小,此处为1024  
    
                    int receivedSize = tcpClient.Receive(buffer);
                    string rawMsg = Encoding.Unicode.GetString(buffer, 0, receivedSize);
                    int rnFixLength = terminateString.Length;   //这个是指消息结束符的长度,此处为
    
                    for (int i = 0; i < rawMsg.Length; )               //遍历接收到的整个buffer文本
                    {
                        if (i <= rawMsg.Length - rnFixLength)
                        {
                            if (rawMsg.Substring(i, rnFixLength) != terminateString)//非消息结束符,则加入sb
                            {
                                stringBuilder.Append(rawMsg[i]);
                                i++;
                            }
                            else
                            {
                                JsonData jsontext = JsonMapper.ToObject(stringBuilder.ToString());  //转化成json格式数据   
    
                                if (jsontext["type"] != null)
                                {
                                    JsonList.Enqueue(jsontext);////////////////// 加入队列   接收服务器消息
                                    stringBuilder = new StringBuilder();
                                    i += rnFixLength;
                                }
                                else {
    
                                    JsonData message = new JsonData();
                                    message["type"] = "4"; 
                                    message["wifi"] = "false";
                                    message["message"] = "ServerError服务器报错";
                                    JsonList.Enqueue(message);////////////////// 加入队列   接收服务器消息
                                    break;
                                } 
                            }
                        }
                        else
                        {
                            stringBuilder.Append(rawMsg[i]);
                            i++;
                        }
                    }
                }
                catch
                {
                    JsonData message = new JsonData();
                    message["type"] = "3"; 
                    message["wifi"] = "false";
                    message["message"] = "ServerClosing服务器断开";
                    JsonList.Enqueue(message);/////////////////// 加入队列  服务器连接失败   
                    tcpClient.Close();
                    break;
                }
            }
        }
        public void AsynSend(string message)
        {
            if (tcpClient.Connected)
            {
               
                byte[] data = Encoding.Unicode.GetBytes(message); 
                
                tcpClient.BeginSend(data, 0, data.Length, SocketFlags.None, asyncResult =>
                {
                    //完成发送消息
                    // int length = 
                    tcpClient.EndSend(asyncResult);
                }, null);
            }
        }
    }
  • 相关阅读:
    java中的构造方法
    在CentOS6.4上安装GitLab
    java通过文件路径读取该路径下的所有文件并将其放入list中
    java IO流 内容整理
    Selenium Webdriver元素定位的八种常用方式
    揭秘Alltesting众测平台
    TestCenter中测试需求、测试用例、测试计划的评审方法
    测试管理工具(TestCenter)产品功能介绍
    Bug管理工具(TCE)之缺陷导入与导出
    Bug管理工具(TCE)之缺陷流程定制
  • 原文地址:https://www.cnblogs.com/big-zhou/p/4671558.html
Copyright © 2011-2022 走看看