socket通信(C#)
?通信兩端分別為客戶端(Client)和服務(wù)器(Server):
統(tǒng)一編碼格式:【Encoding.UTF8】
測試環(huán)境:
需要啟動誰就將誰設(shè)為啟動項(xiàng):?
(先啟動Server,后啟動Client)
?
服務(wù)器(Server):
1:建立一個Socket對像;
2:用socket對像的Bind()方法綁定EndPoint;
3:用socket對像的Listen()方法開始監(jiān)聽;
4:接受到客戶端的連接,用socket對像的Accept()方法創(chuàng)建新的socket對像用于和請求的客戶端進(jìn)行通信;
5:用新的socket對象接收(Receive)和發(fā)送(Send)消息。
服務(wù)器編碼:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace Socket_Server {class Program{static Socket ReceiveSocket;static void Main(string[] args){int port = 8885;//偵聽所有網(wǎng)絡(luò)客戶接口的客活動IPAddress ip = IPAddress.Any;//使用指定的地址簇協(xié)議、套接字類型和通信協(xié)議 <br> ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);//有關(guān)套接字設(shè)置ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint endPoint = new IPEndPoint(ip, port);ReceiveSocket.Bind(new IPEndPoint(ip, port)); //綁定IP地址和端口號ReceiveSocket.Listen(10); //設(shè)定最多有10個排隊(duì)連接請求Console.WriteLine("建立連接");Socket socket = ReceiveSocket.Accept();byte[] receive = new byte[1024];socket.Receive(receive);Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回發(fā)消息。");socket.Send(send);Console.WriteLine("發(fā)送消息為:" + Encoding.UTF8.GetString(send));}} }啟動Server等待客戶端訪問:需要安全權(quán)限,點(diǎn)擊【允許訪問即可】
客戶端(Client):
1:建立一個Socket對像;
2:用socket對像的Connect()方法以上面建立的EndPoint對像做為參數(shù),向服務(wù)器發(fā)出連接請求;
3:如果連接成功,就用socket對像的Send()方法向服務(wù)器發(fā)送信息;
4:用socket對像的Receive()方法接受服務(wù)器發(fā)來的信息?;
5:通信結(jié)束后一定記得關(guān)閉socket;
客戶端編碼:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace Socket_demo {class Program{static Socket ClientSocket;static void Main(string[] args){string IP = "127.0.0.1";int port = 8885;//將IP地址字符串轉(zhuǎn)換成IPAddress實(shí)例IPAddress ip = IPAddress.Parse(IP); //使用指定的地址簇協(xié)議、套接字類型和通信協(xié)議ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 用指定的ip和端口號初始化IPEndPoint實(shí)例IPEndPoint endPoint = new IPEndPoint(ip, port); ClientSocket.Connect(endPoint); //與遠(yuǎn)程主機(jī)建立連接Console.WriteLine("開始發(fā)送消息");//通信時實(shí)際發(fā)送的是字節(jié)數(shù)組,所以要將發(fā)送消息轉(zhuǎn)換字節(jié)byte[] message = Encoding.UTF8.GetBytes("客戶端鏈接127.0.0.1:8885服務(wù)器"); ClientSocket.Send(message);Console.WriteLine("發(fā)送消息為:" + Encoding.UTF8.GetString(message));byte[] receive = new byte[1024];int length = ClientSocket.Receive(receive);//length 接收字節(jié)數(shù)組長度Console.WriteLine("接收消息為:" + Encoding.UTF8.GetString(receive));ClientSocket.Close();//關(guān)閉連接}} }啟動Client客戶端,訪問服務(wù)器:
?訪問成功:?
?如果Server服務(wù)端未啟動則為:
服務(wù)端Server接收到的消息:
創(chuàng)建socket線程
Thread t = new Thread(()=>{});
//將監(jiān)聽放在死循環(huán)內(nèi)
while(true){
? ? ? ? socket監(jiān)聽
}
//啟動線程
t.Start();
啟動服務(wù)器,服務(wù)器端可以無限次數(shù)的接收客戶端信息了。
到這里,Socket的基礎(chǔ)技能講解就完畢了,可以通過這個技能在工作中主要會進(jìn)行推送功能編碼,【推送】是一個非常重要的功能,你手機(jī)里的各種推送廣告、APP的各種消息推送、最最基礎(chǔ)的QQ、微信的聊天功能都依賴于此項(xiàng)技術(shù)。后面會對【W(wǎng)eb Socket】進(jìn)行講解,關(guān)注好,后面直接查看此【分類專欄】即可。
作業(yè)項(xiàng)目,通過此demo,自行搭建Winform項(xiàng)目,進(jìn)行Socket服務(wù)器端,與Client客戶端,進(jìn)行信息交互。
可以分開兩個機(jī)器,使用【ipconfig】查看各自的IP,使用【ping】命令測試網(wǎng)絡(luò)是否通暢,設(shè)置好對應(yīng)的端口號進(jìn)行相互訪問即可完成通信功能。
總結(jié)
以上是生活随笔為你收集整理的socket通信(C#)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET多线程的使用
- 下一篇: C#修改电脑桌面图