博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# Socket发送与接收方法
阅读量:2121 次
发布时间:2019-04-30

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

客户端:
///         /// socket发送字节数组        ///         /// 要发送的byte[]        /// 服务器IP        /// 服务器端口        /// 
接收的byte[]
public static byte[] SendBySocket(byte[] sendData, string ip, int port) { byte[] byteReceive = null; try { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(IPAddress.Parse(ip), port); socket.Send(sendData); int count, size = 512; byte[] data = new byte[size]; MemoryStream ms = new MemoryStream(); while (0 != (count = socket.Receive(data, size, SocketFlags.None))) ms.Write(data, 0, count); byteReceive = ms.ToArray(); ms.Close(); //方法2                //int bytes = 0;                //MemoryStream ms = new MemoryStream();                //while (true)                //{                //    byte[] byteMessage = new byte[10];                //    bytes = socket.Receive(byteMessage, byteMessage.Length, 0);                //    if (bytes <= 0)                //        break;                //    ms.Write(byteMessage, 0, bytes);                //}                //byteReceive = ms.ToArray();                //ms.Close();  socket.Shutdown(SocketShutdown.Both); socket.Close(); } catch { return null; } return byteReceive; }

服务端:

bool btnstatu = true;  //开始停止服务状态              Socket listener;        //开始停止服务按钮        private void btnStart_Click(object sender, EventArgs e)        {                   CancellationTokenSource cts = new CancellationTokenSource();            Task task = new Task(() => Listen(cts.Token), cts.Token);            if (btnstatu)            {                task.Start();                statuBar.Text = "服务已启动,等待客户端连接";                btnstatu = false;                btnStart.Text = "停止服务";            }            else            {                if (listener != null)                {                    listener.Close();                    listener = null;                }                            cts.Cancel();                statuBar.Text = "服务端已停止服务";                btnstatu = true;                btnStart.Text = "开始服务";                statuBar.Text = "服务已停止";            }        }        //监听函数        private void Listen(CancellationToken cts)        {            cts.ThrowIfCancellationRequested();            listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);            IPEndPoint iep = new IPEndPoint(IPAddress.Any, ServerConfig.ServerPort);            try            {                listener.Bind(iep);                listener.Listen(10);                while (true)                {                    Socket accept = listener.Accept();                    byte[] byteMessage = new byte[1024];                    accept.Receive(byteMessage);		    string recvMsg = Encoding.Default.GetString(byteMessage).Replace("\0", "");                                       ShowText(DateTime.Now.ToString("[HH:mm:ss]") + accept.RemoteEndPoint.ToString() + "说:" + recvMsg);                     string sendMsg = "已收到消息";                    accept.Send(Encoding.Default.GetBytes(sendMsg));                    accept.Shutdown(SocketShutdown.Both);                    accept.Close();                }            }            catch             {                          }        }        private void ShowText(string msg)        {            richTextBox1.SafeCall(() =>            {                richTextBox1.AppendText(msg);                richTextBox1.AppendText(System.Environment.NewLine);            });        }

转载地址:http://tmzrf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++ 《第175场周赛-1 》5332.检查整数及其两倍数是否存在
查看>>
Leetcode C++ 《第175场周赛-2 》5333.制造字母异位词的最小步骤数
查看>>
Leetcode C++ 《第175场周赛-3》1348. 推文计数
查看>>
Leetcode C++《热题 Hot 100-44》102.二叉树的层次遍历
查看>>
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>