博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#WinForm,TCP调试工具
阅读量:6833 次
发布时间:2019-06-26

本文共 4382 字,大约阅读时间需要 14 分钟。

Server端配置 参考代码

1)设置基本参数

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

2)启动服务器端

serverIP = IPAddress.Parse(tbxIP.Text);            try            {                //设置IP和端口                serverFullAddr = new IPEndPoint(serverIP, int.Parse(tbxPort.Text));                sock = new Socket(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)设置基本参数

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

2)启动服务器  

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

3)设置侦听

///         /// 设置监听        ///         private void BeginListen()        {            //IP            serverIP = IPAddress.Parse(tbxIP.Text);            //设置IP,端口            serverFullAddr = new IPEndPoint(serverIP, int.Parse(tbxPort.Text));            sock = new Socket(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, int num);        private void SetText(string text, int num)        {            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 void Sending(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!");            }        }

 

转载于:https://www.cnblogs.com/sansui/p/10417935.html

你可能感兴趣的文章
Oracle EBS在编码方式为AL32UTF8时的注意事项
查看>>
linux那些事
查看>>
通信服务器的架构问题
查看>>
所见即所得的游戏界面开发
查看>>
python 学习笔记 五
查看>>
Qt 乱码
查看>>
SpringMVC由浅入深day01_7入门程序小结
查看>>
three.js
查看>>
一个简单的统计图像主颜色的算法(C#源代码)
查看>>
java开发中的重中之重-------mysql(基础篇)
查看>>
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>
9.4-9.19 h5日记总结
查看>>
mysql支持的存储引擎
查看>>
input checkbox复选框取值
查看>>
SimpleAdapter
查看>>
一 python并发编程之多进程
查看>>
Socket通信
查看>>
less文件编译成微信小程序wxss文件
查看>>