tcp备忘及networkstream.length此流不支持查找解决

服务端


bool isRunning = true;
  MouseKeyBoard mk = new MouseKeyBoard();

void InitTcpServer(int port)
        {
            Thread t = new Thread(() =>
            {
                TcpListener listener = new TcpListener(IPAddress.Any, port);
                listener.Start();
                Log("监听:" + port);

                while (isRunning)
                {
                    var tcpClient = listener.AcceptTcpClient();
                    try
                    {
                        Thread t2 = new Thread(() =>
                        {
                            NetworkStream clientStream = tcpClient.GetStream();

                            while (isRunning)
                            {
                                try
                                {
                                    if (!clientStream.DataAvailable)
                                    {
                                        Thread.Sleep(100); //否则死循环,cpu占用超高
                                        continue;
                                    }
                                    byte[] buffer = new byte[tcpClient.Available]; //new byte[clientStream.Length]; //报错此流不支持查找
                                    int readBytes = 0;
                                    readBytes = clientStream.Read(buffer, 0, buffer.Length);
                                    clientStream.Flush();

                                    string request = Encoding.UTF8.GetString(buffer).Trim();
                                    Log(request);

                                    if (request.StartsWith("SetTime|"))
                                    {
                                        var str = DateTime.Parse(request.Substring(8)).ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss");
                                        SetLocalTimeByStr(str);
                                        clientStream.Flush();
                                        clientStream.Write(Encoding.Default.GetBytes("ok"), 0, 2); //发送给客户端
                                        clientStream.Flush();
                                    }
                                    else if (request.StartsWith("MouseClick|"))
                                    {
                                        var arr = request.Split(‘|‘);
                                        if (arr.Length >= 2)
                                        {
                                            mk.MouseClick(arr[1]);
                                        }
                                    }
                                    else if (request.StartsWith("ShutDown|"))
                                    {
                                        ExecuteCmd("shutdown -s -t 120");
                                    }
                                    else if (request.StartsWith("CancelShutDown|"))
                                    {
                                        ExecuteCmd("shutdown -a");
                                    }else if (request.StartsWith("SendString"))
                                    {
                                        var arr = request.Split(‘|‘);
                                        if (arr.Length >= 2)
                                        {
                                            string str = arr[1];
                                            this.button1.BeginInvoke(new Action(() => {
                                                mk.SendKeys(str);
                                            }));

                                        }
                                    }

                                }
                                catch (Exception ex)
                                {
                                    Log("ex|" + ex.Message + ex.StackTrace);
                                }

                                Thread.Sleep(100);
                            }
                        });
                        t2.Start();
                    }
                    catch (Exception ex2)
                    {
                        Log("ex2|" + ex2.Message + ex2.StackTrace);
                    }

                    Thread.Sleep(100);
                }

            });

            t.Start();
        }

客户端

private void button2_Click(object sender, EventArgs e)
        {
            tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.0.168"), Convert.ToInt32(this.textBox2.Text.Trim())));
            MessageBox.Show("连接成功.");
        }

        private void button1_Click(object sender, EventArgs e)
        {

            Thread t = new Thread(() =>
            {
                NetworkStream clientStream = tcpClient.GetStream();

                string request = "SetTime|" + this.textBox1.Text.Trim();

                byte[] requestBuffer = Encoding.Default.GetBytes(request);

                clientStream.Write(requestBuffer, 0, requestBuffer.Length);                

                clientStream.Flush();

                var buffer = new byte[1024];
                while (isRunning)
                {
                    clientStream.Read(buffer, 0, buffer.Length);

                    string str = Encoding.Default.GetString(buffer).Trim();
                    if (str.StartsWith("ok"))
                    {
                        Invoke(() =>
                        {
                            MessageBox.Show("修改时间成功.");
                        });

                    }
                    Thread.Sleep(100);
                }
            });
            t.Start();

            this.button1.Enabled = false;
        }
时间: 2024-10-11 16:49:30

tcp备忘及networkstream.length此流不支持查找解决的相关文章

程序备忘_过流_LV_15KW

程序备忘_过流_LV_15KW 2016-09-07 21:53 98人阅读 评论(0) 收藏 举报  分类: 程序备忘(42)  版权声明:本文为博主原创文章,可以转载

调试android chrome web page简明备忘

必备工具 adb tools.android chrome 先开启手机调试模式 adb forward tcp:9919 localabstract:chromedevtoolsremote 成功会提示 * daemon not running. starting it now on port 5037 * * daemon started successfully * 不成功的话用这个命令再试 adb kill-server 接着打开下面的链接,这里的9919是上面adb命令中指定的 http

备忘:CSS术语词汇表——张鑫旭

一.叨点什么 写文章的时候经常用到一些CSS方面的专业词汇.但是毕竟芳华年少不在,脑袋有点秀逗了,很多名词都记不住,这种感觉比厕所便秘还难受.比如今天居然记不起来公司公认脸蛋最pp的同事的名字,没想到我会记不住美女的名字.我觉得我背后一阵萧瑟的秋风吹起,自己俨然成了漫画里面的程序猿—— 某天闲逛到nimbupani,发现有专门展示CSS术语的文章,哇咔咔,感觉好像咬到一口正宗的高邮咸鸭蛋一样,不过人家的是英文,所以我还要本地化润饰处理,然后,就可以留给自己备忘的哈,的说. 二.CSS词汇我来也

Nmap备忘单:从探索到漏洞利用(Part 2)

这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫描选项是有一定原因的.它可以在不受防火墙限制的高速网络每秒扫描数千个端口 .同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接. 命令:NMAP -sS 目标 TCP连接扫描 当SYN扫描不可用的时候,TCP连接扫描是默认的TCP扫描类型.这是在用户不具有发送RAW数据包的特权的情况下.不是

c# 加密转载 备忘

public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <returns></returns> public static string Base64Encrypt(string input)

oracle下 启动subversion命令 及 oracle相关服务启动备忘

linux shell下  svnserve - d -r + 目录   例如:svnserve -d -r /svn 启动 svn服务. 访问svn://192.168.0.120/kjcg 测试. 启动oracle: 一.如何启动数据库实例 1.进入到sqlplus启动实例 [[email protected] ~]$ su - oracle --“切换到oracle用户” 2. Password: [[email protected] ~]$ lsnrctl start  --“打开监听”

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo

Express模版引擎hbs备忘

最近几天折腾了下express,想找个合适的模版引擎,下面是一些折腾过程的备忘 选择标准 选择一门模版语言时,可能会考虑的几点 语法友好(micro tmpl那种语法真是够了) 支持模版嵌套(子模版的概念) 支持模版继承(extend) 前后端共用 有容错处理(最好定位到具体出错位置) 支持预编译(性能好) 注意到hbs,似乎满足大部分的需求:https://github.com/donpark/hbs getting started demo地址:https://github.com/chyi

『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因

近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 JSON 转为 byte[]. > 从 HttpWebRequest.GetRequestStream() 获得 写入流. > 将 byte[] 写入到这个 Stream 中. 类似的 操作,包括 文件上传,POST 表单 —— 最终都要 转换成 byte[] 核心注意事项: 一定不要设置 Ht