c# Socket發送與接收方法

來源:互聯網
上載者:User
用戶端:
  /// <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);            });        }


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.