日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#Socket類相關知識的學習

C# Socket 類為網(wǎng)絡通信提供了一套豐富的方法和屬性。Socket 類允許您使用 ProtocolType 枚舉中所列出的任何一種協(xié)議執(zhí)行異步和同步數(shù)據(jù)傳輸。Socket 類遵循異步方法的 .NET Framework 命名模式;例如,同步 Receive 方法對應于異步 BeginReceive 和 EndReceive 方法。

成都創(chuàng)新互聯(lián)業(yè)務包括:成品網(wǎng)站、企業(yè)產(chǎn)品展示型網(wǎng)站建設、品牌網(wǎng)站制作、電子商務型網(wǎng)站建設、外貿(mào)網(wǎng)站建設(多語言)、商城網(wǎng)站開發(fā)、按需制作、網(wǎng)絡營銷推廣等。效率優(yōu)先,品質保證,用心服務是我們的核心價值觀,我們將繼續(xù)以良好的信譽為基礎,秉承穩(wěn)固與發(fā)展、求實與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質的互聯(lián)網(wǎng)服務!

如果應用程序在執(zhí)行期間只需要一個線程,請使用下面的方法,這些方法適用于同步操作模式。

如果當前使用的是面向連接的協(xié)議(如 TCP),則服務器可以使用 Listen 方法偵聽連接。Accept 方法處理任何傳入的連接請求,并返回可用于與遠程主機進行數(shù)據(jù)通信的 Socket。可以使用此返回的 Socket 來調用 Send 或 Receive 方法。如果要指定本地 IP 地址和端口號,請在調用 Listen 方法之前先調用 Bind 方法。如果您希望基礎服務提供程序為您分配可用端口,請使用端口號 0。如果希望連接到偵聽主機,請調用 Connect 方法。若要進行數(shù)據(jù)通信,請調用 Send 或 Receive 方法。

如果當前使用的是無連接協(xié)議(如 UDP),則根本不需要偵聽連接。調用 ReceiveFrom 方法可接受任何傳入的數(shù)據(jù)報。使用 SendTo 方法可將數(shù)據(jù)報發(fā)送到遠程主機。

若要在執(zhí)行過程中使用單獨的線程處理通信,請使用下面的方法,這些方法適用于異步操作模式。

如果當前使用的是面向連接的協(xié)議(如 TCP),則可使用 Socket、BeginConnect 和 EndConnect 方法來連接偵聽主機。通過使用 BeginSend 和 EndSend 方法,或者使用 BeginReceive 和 EndReceive 方法,可以進行異步數(shù)據(jù)通信??梢允褂?BeginAccept 和 EndAccept 處理傳入的連接請求。

如果您使用的是 UDP 等無連接協(xié)議,則可以使用 BeginSendTo 和 EndSendTo 來發(fā)送數(shù)據(jù)報,而使用 BeginReceiveFrom 和 EndReceiveFrom 來接收數(shù)據(jù)報。

如果對一個套接字執(zhí)行多個異步操作,它們不一定按啟動時的順序完成。

當數(shù)據(jù)發(fā)送和數(shù)據(jù)接收完成之后,可使用 Shutdown 方法來禁用 Socket。在調用 Shutdown 之后,可調用 Close 方法來釋放與 Socket 關聯(lián)的所有資源。

通過C# Socket 類,您可以使用 SetSocketOption 方法來配置 Socket??梢允褂?GetSocketOption 方法來檢索這些設置。

注意

如果要編寫相對簡單的應用程序,而且不需要最高的性能,則可以考慮使用 TcpClient、TcpListener 和 UdpClient。這些類為 Socket 通信提供了更簡單、對用戶更友好的接口。

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平臺說明: 并非所有設備的操作系統(tǒng)會支持全部的套接字選項。

服務器端代碼:

 
 
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Threading;
  9. using System.Net;
  10. using System.Net.Sockets;
  11. namespace ChatToolServer
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         //server-用于處理客戶端連接請求的socket
  16.         Socket clientSocket = null;
  17.         delegate void del();
  18.     
  19.         public Form1()
  20.         {
  21.             InitializeComponent();
  22.         }
  23.         //server-偵聽方法
  24.         private void listen()
  25.         {
  26.             //獲取服務器IP
  27.             string hostName = Dns.GetHostName();
  28.             IPAddress[] ip = Dns.GetHostAddresses(hostName);
  29.             IPAddress HostIp = ip[0];
  30.             //創(chuàng)建一個網(wǎng)絡端點
  31.             IPEndPoint iep = new IPEndPoint(HostIp, 82);
  32.             //創(chuàng)建服務端服務端套接字
  33.             Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  34.             //將套接字與網(wǎng)絡端點綁定
  35.             serverSocket.Bind(iep);
  36.             //將套接字置為偵聽狀態(tài),并設置最大隊列數(shù)為10
  37.             serverSocket.Listen(10);
  38.             //以同步方式從偵聽套接字的連接請求隊列中提取第一個掛起的連接請求,然后創(chuàng)建并返回新的 Socket
  39.             //新的套接字:包含對方計算機的IP和端口號,可使用這個套接字與本機進行通信  
  40.             clientSocket = serverSocket.Accept();
  41.             if (clientSocket != null)
  42.             {
  43.                 MessageBox.Show(”連接成功!”);
  44.             }
  45.            
  46.         }
  47.         private void send_Click(object sender, EventArgs e)
  48.         {
  49.             if (this.textBox1.Text != “”)//不能發(fā)送空消息
  50.             {             
  51.                     try
  52.                     {
  53.                         //發(fā)送數(shù)據(jù)
  54.                         string message = textBox1.Text;
  55.                         byte[] sendbytes = System.Text.Encoding.UTF8.GetBytes(message);
  56.                         int successSendBtyes = clientSocket.Send(sendbytes, sendbytes.Length, SocketFlags.None);
  57.                     }
  58.                     catch (Exception exp)
  59.                     {
  60.                         MessageBox.Show(exp.Message);
  61.                     }
  62.                     //將發(fā)送的數(shù)據(jù)顯示到對話窗口并使對話窗口的滾動條一直停留在最下方
  63.                     this.textBox2.Text +=”服務器:”+”\r\n” +textBox1.Text + “\r\n”;//發(fā)完一條消息就換行顯示
  64.                     this.textBox2.SelectionStart = this.textBox2.Text.Length;
  65.                     this.textBox2.ScrollToCaret();
  66.                     this.textBox1.Text = “”;//將發(fā)送窗口清空
  67.               
  68.             }
  69.             else
  70.             {
  71.                 MessageBox.Show(”發(fā)送內(nèi)容不能為空”);
  72.             }
  73.                
  74.         }
  75.         private void Form1_Load(object sender, EventArgs e)
  76.         {
  77.             //server-創(chuàng)建并運行偵聽線程
  78.             Thread threadListen = new Thread(new ThreadStart(listen));
  79.             threadListen.Start();
  80.         }
  81.         private void timer1_Tick(object sender, EventArgs e)
  82.         {        
  83.                 byte[] receiveBytes = new byte[1024];
  84.                 //如果偵聽后取得客戶端連接,并且客戶端的緩沖區(qū)中有內(nèi)容可讀,開始接收數(shù)據(jù)
  85.                 if (clientSocket != null)
  86.                 {
  87.                     if (clientSocket.Poll(100, SelectMode.SelectRead))
  88.                     {
  89.                         int successReceiveBytes = clientSocket.Receive(receiveBytes);
  90.                         this.textBox2.Text += “客戶端:” +”(”+ clientSocket.RemoteEndPoint.ToString()+”)”+”\r\n” +
  91.                              System.Text.Encoding.UTF8.GetString(receiveBytes, 0, successReceiveBytes) + “\r\n”;
  92.                         this.textBox2.SelectionStart = this.textBox2.Text.Length;//使對話窗口的滾動條一直停留在最下方
  93.                         this.textBox2.ScrollToCaret();
  94.                     }
  95.                 }
  96.         }
  97.     }
  98. }

客戶端代碼;

 
 
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Net;
  9. using System.Net.Sockets;
  10. using System.Threading;
  11. namespace ChatToolClient
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         Socket clientSocket = null;//客戶端套接字
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.         private void Form1_Load(object sender, EventArgs e)
  21.         {
  22.             try
  23.             {
  24.                 //建立與服務器連接的套接字
  25.                 IPAddress ip = IPAddress.Parse(”172.16.94.134″);
  26.                 IPEndPoint iep = new IPEndPoint(ip, 82);
  27.                 clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  28.                 clientSocket.Connect(iep);
  29.                 textBox2.Text = “連接成功” + “\r\n”;
  30.                
  31.             }
  32.             catch (Exception exp)
  33.             {
  34.                 MessageBox.Show(exp.Message);
  35.             }
  36.         }
  37.         private void send_Click(object sender, EventArgs e)
  38.         {
  39.             if (textBox1.Text != “”)
  40.             {
  41.                 try
  42.                 {
  43.                     //發(fā)送數(shù)據(jù)
  44.                     string message = textBox1.Text;
  45.                     byte[] sendbytes = System.Text.Encoding.UTF8.GetBytes(message);
  46.                     int successSendBtyes = clientSocket.Send(sendbytes, sendbytes.Length, SocketFlags.None);
  47.                 }
  48.                 catch (Exception exp)
  49.                 {
  50.                     MessageBox.Show(exp.Message);
  51.                 }
  52.                 //將發(fā)送的數(shù)據(jù)顯示到對話窗口并使對話窗口的滾動條一直停留在最下方
  53.                 this.textBox2.Text += “我自己:”+”\r\n”+textBox1.Text + “\r\n”;//發(fā)完一條消自己息就換行顯示
  54.                 this.textBox2.SelectionStart = this.textBox2.Text.Length;
  55.                 this.textBox2.ScrollToCaret();
  56.                 this.textBox1.Text = “”;//將發(fā)送窗口清空
  57.             }
  58.             else
  59.             {
  60.                 MessageBox.Show(”發(fā)送內(nèi)容不能為空”);
  61.             }
  62.         }
  63.         private void timer1_Tick(object sender, EventArgs e)
  64.         {
  65.             byte[] receiveBytes = new byte[1024];
  66.             if (clientSocket.Poll(100, SelectMode.SelectRead))
  67.             {
  68.                 int successReceiveBytes = clientSocket.Receive(receiveBytes);
  69.                 this.textBox2.Text +=”服務器:”+”\r\n”+
  70.                             System.Text.Encoding.UTF8.GetString(receiveBytes, 0, successReceiveBytes) + “\r\n”;
  71.                 this.textBox2.SelectionStart = this.textBox2.Text.Length;//使對話窗口的滾動條一直停留在最下方
  72.                 this.textBox2.ScrollToCaret();
  73.             }     
  74.         }
  75.     }
  76. }

C# Socket類方面的知識就介紹到這里,希望對大家有所幫助。


本文標題:C#Socket類相關知識的學習
本文URL:http://www.dlmjj.cn/article/cocigse.html