文章目錄
- 前言
- 一、Socket是什么?
- 二、使用步驟
- 1.服務端
- 2.客戶端
- 總結
C#的Socket使用教程
一、Socket是什么?
Socket是應用層與TCP/IP協議族通信的中間軟體抽象層,,是用于在兩個基于TCP/IP協議的應用程式之間相互通信,其實呢,Socket就是把復雜的TCP/IP協議族隱藏在Socket介面后面,
二、使用步驟
1.服務端
static Socket Server = null;//服務端的socket
Dictionary<string,Socket> SocketList = new Dictionary<string, Socket>();//保存客戶的物件(這樣就可以想發給誰就發給誰)
try
{
string host = "127.0.0.1";//本機
int port = "8866";//埠號
IPAddress iPAddress = IPAddress.Parse(host);
IPEndPoint iP = new IPEndPoint(iPAddress, port);
Server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Server.Bind(iP);//系結IP地址:埠
Server.Listen(10);//設定最多10個連接請求排隊
//建立執行緒監聽client連接請求
Thread t1 = new Thread(new ThreadStart(AcceptConncetion));
t1.Start();
Console.WriteLine("啟動成功!"+ "監聽:" + Server.LocalEndPoint.ToString());
}
catch (Exception ex)
{
Console.WriteLine("啟動失敗");
}
/// <summary>
/// 監聽客戶端連接
/// </summary>
public void AcceptConncetion()
{
Socket acceptSocket = null;
while (true)
{
acceptSocket = Server.Accept();//獲取到客戶端的
SocketList.Add(acceptSocket.RemoteEndPoint.ToString(), acceptSocket);//添加客戶端物件
Console.WriteLine("連接數量"+SocketList.Count);
//每接收到一個連接,啟動新執行緒接收資料
Thread t2 = new Thread(new ParameterizedThreadStart(GetData));
t2.Start(acceptSocket);
}
}
/// <summary>
/// 獲取客戶端發送來的資料
/// </summary>
/// <param name="clientSocket"></param>
public void GetData(object clientSocket)
{
Socket socket = clientSocket as Socket;
while (true)
{
byte[] bs = new byte[1024 * 1024];
//接收資料
socket.Receive(bs);
string str = Encoding.UTF8.GetString(bs);
this.Invoke(new Action(() =>
{
richTextBox1.AppendText("\n"+str);
}));
}
}
/// <summary>
///給客戶端發送資訊
/// </summary>
private void Send()
{
var sk = SocketList[0];//選擇客戶端的socket
string sendData = "一起睡覺嘛";
byte[] bs = Encoding.UTF8.GetBytes(sendData);
sk.Send(bs);
}
2.客戶端
1.連接服務端代碼并接收資訊:
Socket Client = null;//客戶端物件socket
string host = "127.0.0.1";
int port = 8866;
IPAddress address = IPAddress.Parse(host);
IPEndPoint iP = new IPEndPoint(address, port);
Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Client.Connect(iP);//連接服務端
Thread t1 = new Thread(new ThreadStart(() =>
{
while (true)
{
byte[] bs = new byte[1024 * 1024];
Client.Receive(bs);//接收資訊
string str = Encoding.UTF8.GetString(bs);
this.richTextBox1.Invoke(new Action(() =>
{
richTextBox1.AppendText("\n"+str);
}));
}
}));
t1.Start();
2.發送到客服端:
string sendData = "想一起睡呀";
byte[] bs = Encoding.UTF8.GetBytes(sendData);
Client.Send(bs);//發送資訊
總結
一個服務端,n個客戶端連接,
學習與快樂并進,只愿當下的我還是還是個陽光開朗的有那么點帥氣的小伙子哈哈哈
https://blog.csdn.net/qq_41187108/article/details/116204749
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280968.html
標籤:其他
