C#WinForm,TCP调试工具

摘要:
","Error!");}}catch{Console.WriteLine("Error!","Error!");}}

Server端配置 参考代码

1)设置基本参数


///
<summary> ///以本机作测试 /// </summary> private IPAddress serverIP = IPAddress.Parse("192.168.0.105"); /// <summary> ///完整终端地址 /// </summary> privateIPEndPoint serverFullAddr; /// <summary> ///连接套接字 /// </summary> private Socket sock;

2)启动服务器端

serverIP =IPAddress.Parse(tbxIP.Text);
            try
            {
                //设置IP和端口
                serverFullAddr = new IPEndPoint(serverIP, int.Parse(tbxPort.Text));
                sock = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //指定本地主机地址和端口号
sock.Connect(serverFullAddr);
                btnConn.Enabled = false;
               MessageBox.Show("连接成功");
                btnClose.Enabled = true;
                sock.Close();
            }
            catch(Exception ee)
            {
MessageBox.Show("连接失败"+ee.ToString());
}

3)停止服务端

 sock.Close();//关闭Socket连接

Client端 参考代码

1)设置基本参数

  /// <summary>
        ///以本机作测试,IP
        /// </summary>
        private IPAddress serverIP = IPAddress.Parse("127.0.0.1");
        /// <summary>
        ///完整终端地址
        /// </summary>
        privateIPEndPoint serverFullAddr;
        /// <summary>
        ///连接套接字
        /// </summary>
        privateSocket sock;
        /// <summary>
        ///监听线程
        /// </summary>
        Thread myThead = null;

2)启动服务器

  myThead = new Thread(newThreadStart(BeginListen));
            myThead.Start();
            btnStart.Enabled = false;
            btnstop.Enabled = true;

3)设置侦听

  /// <summary>
        ///设置监听
        /// </summary>
        private voidBeginListen()
        {
            //IP
            serverIP =IPAddress.Parse(tbxIP.Text);
            //设置IP,端口
            serverFullAddr = new IPEndPoint(serverIP, int.Parse(tbxPort.Text));
            sock = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //指定本地主机地址和端口号
sock.Bind(serverFullAddr);
            lbxMessage.Invoke(new SetTextCallback(SetText), "启动成功 时间:" + DateTime.Now, 1);
            byte[] message = new byte[1024];
            string mess = "";
            while (true)
            {
                try
                {
                    sock.Listen(5);//设置监听频率
                    Socket newSocket = sock.Accept();//阻塞方式
                    int bytes = newSocket.Receive(message);//接收数据
                    mess = Encoding.Default.GetString(message, 0, bytes);//对接收字节编码(S与C 两端编码格式必须一致不然中文乱码)(当接收的字节大于1024的时候 这应该是循环接收,测试就没有那样写了)
                    //do
                    //{
                    //bytes = newSocket.Receive(message, message.Length, 0);
                    //mess = mess + Encoding.ASCII.GetString(message, 0, bytes);
                    //}
                    //while (bytes > 0);

                    lbxMessage.Invoke(new SetTextCallback(SetText), mess, 1);//子线程操作主线程UI控件
                    //获取客户端的IP和端口
                    string ip11 =newSocket.RemoteEndPoint.AddressFamily.ToString();
                    mess = "已接收数据: "+ mess +"来自:" +ip11+ "当前时间为:" + DateTime.Now; //处理数据
                    newSocket.Send(Encoding.Default.GetBytes(mess));//向客户端发送数据

                }
                catch(SocketException se)
                {
                    lbxMessage.Invoke(new SetTextCallback(SetText), mess + se, 1);
                }
            }
        }

4)生命委托

   delegate void SetTextCallback(string text, intnum);
        private void SetText(string text, intnum)
        {
            lbxMessage.Items.Add(text);
        }

5)停止服务

 try
            {
                sock.Close();
                //中止监听
myThead.Abort();
                btnStart.Enabled = true;
                btnstop.Enabled = false;
                lbxMessage.Items.Add("停止成功 时间:" +DateTime.Now);
            }
            catch(Exception ee)
            {
                lbxMessage.Text = "停止失败。。" +ee;
            }

5)接收消息

       private voidSending(IAsyncResult rec_socket)
        {
            //发送给客户端的消息
            string sendmsg = "";
            Socket socket =(Socket)rec_socket.AsyncState;
            try
            {
                if(socket.Connected)
                {
                    byte[] msgBuff =Encoding.UTF8.GetBytes(sendmsg);
                    socket.Send(msgBuff);
                }
                else
                {
                    Console.WriteLine("Error!", "Error!");
                }
            }
            catch
            {
                Console.WriteLine("Error!", "Error!");
            }
        }

免责声明:文章转载自《C#WinForm,TCP调试工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇正则表达式全部符号解释String和datetime在SQL中和在C#中相互转换方法总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TCP的核心系列 — SACK和DSACK的实现(三)

不论是18版,还是37版,一开始都会从TCP的控制块中取出SACK选项的起始地址。 SACK选项的起始地址是保存在tcp_skb_cb结构的sacked项中的,那么这是在什么时候做的呢? SACK块并不是总是合法的,非法的SACK块可能会引起处理错误,所以还需要进行SACK块的合法性检查。 本文主要内容:TCP首部中SACK选项的解析和地址的获取,SACK...

WinForm跨线程访问控件异常

WinForm跨线程访问控件异常 最近做了个WinForm的小项目,遇到个简单的问题记录下。需求:点击”下载“,显示正在下载,下载完后更新状态为”ready“(要求用多线程,避免前台卡死)。 做法 新建一个线程,在新线程中下在更新控件状态,报异常跨线程程访问控件(当然可以通过关闭跨线程访问控件检验解决,不鼓励这么做)。应该C#5.0版本添加的任务Task异...

Nginx配置项优化(转载)

(1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l  [root@lx~]# vi/usr/local/nginx1.10/conf/nginx.conf worker...

Linux Linux内核参数调优

Linux内核参数调优 by:授客QQ:1033553122 关于调优的建议: 1、出错时,可以查看操作系统日志,可能会找到一些有用的信息 2、尽量不要“批量”修改内核参数,笔者就曾这么干过,结果“调优”后,性能反而下降,事务出错数反而增加,所以,调优的时候可以考虑逐个参数进行调优,然后对比效果。   说明:我也不是很懂,参考自网络整理了下可能需要调整...

《精通并发与Netty》学习笔记(13

一、粘包/拆包概念 TCP是一个“流”协议,所谓流,就是没有界限的一长串二进制数据。TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整的包,可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。 一般所谓的TCP粘包是...

HAProxy安装配置用于TCP的负载均衡

HaProxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会...