c# Socket发送与接收方法

来源:互联网 发布:java mac 绝对路径 编辑:程序博客网 时间:2024/05/21 19:27
客户端:
  /// <summary>        /// socket发送字节数组        /// </summary>        /// <param name="sendData">要发送的byte[]</param>        /// <param name="ip">服务器IP</param>        /// <param name="port">服务器端口</param>        /// <returns>接收的byte[]</returns>        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);            });        }


原创粉丝点击