C# SOCKET發送和接收例子,

來源:互聯網
上載者:User

C# SOCKET發送和接收例子,
Socket 用戶端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;
using System.Net.Sockets;


namespace A0140_SocketClient.Sample
{

    /// <summary>
    /// 這個類為一個 Socket 用戶端的例子.
    /// 這個類簡單的 串連到 Socket 伺服器,並發送一段訊息。
    /// 然後讀取來自伺服器的反饋
    /// 最後結束程式.
    ///
    /// 服務端輸出:
    /// 開始偵聽 8088 連接埠……
    /// 接收到客戶的串連
    /// 接收到來自用戶端的資料為:Hello Socket Server!
    ///
    /// 用戶端輸出:
    /// 向伺服器發送到了:Hello Socket Server!
    /// 從伺服器接收到了:Hello Socket Server!
    ///
    /// </summary>
    class StockClient
    {

        /// <summary>
        /// 字元編碼處理.
        /// </summary>
        private static readonly Encoding ASCII;


        /// <summary>
        /// 用於 發送/接收的連接埠.
        /// </summary>
        private const int PORT = 8088;


        private const String SEND_MESSAGE = "Hello Socket Server!";


        static StockClient()
        {
            ASCII = Encoding.ASCII;
        }

        public void SendMessage()
        {
            // 構造用於發送的 位元組緩衝.
            Byte[] sendBytes = ASCII.GetBytes(SEND_MESSAGE);

            // 構造用於接收的 位元組緩衝.
            Byte[] recvBytes = new Byte[256];

            // IP地址.
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");

            // 存取點.
            IPEndPoint ephost = new IPEndPoint(localAddr, PORT);


            // 第一個參數:AddressFamily = 指定 Socket 類的執行個體可以使用的定址方案。
            //     Unspecified 未指定地址族。
            //     InterNetwork IP 版本 4 的地址。
            //     InterNetworkV6 IP 版本 6 的地址。
            //
            // 第二個參數:SocketType = 指定 Socket 類的執行個體表示的通訊端類型。
            //     Stream 一個通訊端類型,支援可靠、雙向、基於串連的位元組流,而不重複資料,也不保留邊界。
            //            此類型的 Socket 與單個對方主機通訊,並且在通訊開始之前需要建立遠程主機串連。
            //            此通訊端類型使用傳輸控制通訊協定 (Tcp),AddressFamily 可以是 InterNetwork,也可以是 InterNetworkV6。
            //
            // 第三個參數:ProtocolType = 指定 Socket 類支援的協議。
            //     Tcp 傳輸控制通訊協定 (TCP)。
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                // 嘗試串連主機.
                s.Connect(ephost);


                Console.WriteLine("向伺服器發送到了:{0}", SEND_MESSAGE);

                // 向主機發送資料.
                s.Send(sendBytes, sendBytes.Length, SocketFlags.None);

                // 接收伺服器的應答.
                Int32 bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);


                StringBuilder buff = new StringBuilder();

                while (bytes > 0)
                {
                    // 將緩衝的位元組數組,裝換為字串.
                    String str = ASCII.GetString(recvBytes, 0, bytes);
                    // 加入字串緩衝
                    buff.Append(str);
                    // 再次接受,看看後面還有沒有資料.
                    bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);
                }

                Console.WriteLine("從伺服器接收到了:{0}", buff.ToString());


            }
            catch (Exception ex)
            {
                Console.WriteLine("串連/發送/接收過程中,發生了錯誤!");
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                s.Close();
            }
        }
    }
}




Socket 服務端

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Threading;

namespace A0130_SocketServer.Sample
{

    /// <summary>
    /// Socket 服務端例子
    /// 
    /// 這個例子僅僅處理一個 用戶端的訪問, 處理完畢後退出.
    /// 
    /// 
    /// 服務端的輸出為:
    /// 
    /// 開始偵聽 8088 連接埠……
    /// 接收到客戶的串連
    /// 接收到來自用戶端的資料為:1
    /// 
    /// 
    /// 
    /// 用戶端的輸入為:
    /// 
    /// telnet 127.0.0.1 8088
    /// 1
    /// 失去了跟主機的串連。
    /// 
    /// 
    /// </summary>
    class SocketServer
    {

        /// <summary>
        /// 字元編碼處理.
        /// </summary>
        private static readonly Encoding ASCII;


        /// <summary>
        /// 用於 監聽的連接埠.
        /// </summary>
        private const int PORT = 8088;


        static SocketServer()
        {
            ASCII = Encoding.ASCII;
        }

        public void StartServer()
        {
            TcpListener myListener = null;
            try
            {
                // IP地址.
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");

                // 在 8088 連接埠 開一個偵聽.
                myListener = new TcpListener(localAddr, PORT);

                // 開始偵聽.
                myListener.Start();
                Console.WriteLine("開始偵聽 {0} 連接埠……", PORT);

                // 程式在這裡暫停, 等待用戶端的接入.
                Socket mySocket = myListener.AcceptSocket();

                // 如果執行到這裡,說明接收到了客戶的串連.
                Console.WriteLine("接收到客戶的串連");

                // 位元組緩衝.
                Byte[] recvBytes = new Byte[256];

                // 讀取資料到緩衝區當中
                Int32 bytes = mySocket.Receive(recvBytes, recvBytes.Length, SocketFlags.None);

                // 將緩衝區當中的 byte 數組,轉化為 字串.
                String str = ASCII.GetString(recvBytes, 0, bytes);

                Console.WriteLine("接收到來自用戶端的資料為:{0}", str);

                // 將讀取到的資料,發送回給用戶端.
                mySocket.Send(recvBytes, bytes, SocketFlags.None);
                // 休眠5秒.
                Thread.Sleep(5000);
                // 關閉 Socket
                mySocket.Close();

            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            finally
            {

                myListener.Stop();
            }
        }
    }
}



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.