C# Socket 發(fā)送&接收&返回 簡單應(yīng)用實(shí)例
好久沒有寫過博客了,最近因項(xiàng)目需求,需要用到Socket來進(jìn)行通信,簡單寫了幾個例子,記錄一下,代碼很簡單,無非就是接收與發(fā)送,以及接收到數(shù)據(jù)后返回一個自定義信息,也可以定義為發(fā)送。
接收端因?yàn)樾枨笠O(jiān)聽某個端口,則在一開始判斷一下,要使用的端口是否被占用,定義一個處理方法,以下為處理代碼:
public static bool PortIsUse(int port) { bool isUse = false; IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();//找到已用端口 foreach (IPEndPoint endPoint in ipEndPoints) { if (endPoint.Port == port)//判斷是否存在 { isUse= true; break; } } return isUse; }
定義接收端:
TcpListener tcpl = new TcpListener(new IPAddress(new byte[] { 127, 0, 0, 1 }), 1111);//定義一個TcpListener對象監(jiān)聽本地的1111端口 tcpl.Start();//監(jiān)聽開始 while (true) { Socket s = tcpl.AcceptSocket();//掛起一個Socket對象 string remote = s.RemoteEndPoint.ToString();//獲取發(fā)送端的IP及端口轉(zhuǎn)為String備用 Byte[] stream = new Byte[1024]; s.Receive(stream);//接收發(fā)送端發(fā)過來的數(shù)據(jù),寫入字節(jié)數(shù)組 //BGW_Handle.ReportProgress(1, "接收來自[" + remote + "]信息"); string _data = Encoding.UTF8.GetString(stream);//將字節(jié)數(shù)據(jù)數(shù)組轉(zhuǎn)為String s.Send(stream);//將接收到的內(nèi)容,直接返回接收端 s.Shutdown(SocketShutdown.Both); } tcpl.Stop();//停止監(jiān)聽
定義發(fā)送端代碼:
IPAddress ip = IPAddress.Parse("127.0.0.1");//接收端所在IP IPEndPoint ipEnd = new IPEndPoint(ip, 1111);//接收端所監(jiān)聽的接口 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化一個Socket對象 try { socket.Connect(ipEnd);//連接指定IP&端口 } catch (SocketException e) { Console.WriteLine("連接失敗"); Console.WriteLine(e.ToString()); return; } socket.Send(Encoding.UTF8.GetBytes("1234567890"));//發(fā)送數(shù)據(jù) while (true)//定義一個循環(huán)接收返回數(shù)據(jù) { byte[] data = new byte[1024]; socket.Receive(data);//接收返回數(shù)據(jù) string stringData = Encoding.UTF8.GetString(data); if (!string.IsNullOrWhiteSpace(stringData)) { Console.Write(stringData); break; } }29 socket.Shutdown(SocketShutdown.Both); socket.Close();//關(guān)閉Socket
從上面代碼來看,還是很簡單的,這也要?dú)w功于微軟所做的工作,以上代碼若有錯誤之處可在評論里提出來。
這篇C# Socket 發(fā)送&接收&返回 簡單應(yīng)用實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)自由組合本地緩存、分布式緩存和數(shù)據(jù)查詢
這篇文章介紹了C#實(shí)現(xiàn)本地緩存、分布式緩存和數(shù)據(jù)查詢的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07.net使用Aspose.Words進(jìn)行Word替換操作的實(shí)現(xiàn)代碼
之前在工作中,需要實(shí)現(xiàn)Word打印功能,并且插入圖片。當(dāng)時采取的方式則是使用書簽進(jìn)行操作。首先在word內(nèi)插入書簽,完成后,存為模板。程序加載該模板,找到書簽,并在指定位置寫入文字即可2013-05-05學(xué)習(xí)Winform文本類控件(Label、Button、TextBox)
這篇文章主要和大家一起學(xué)習(xí)Winform文本類控件,包含標(biāo)簽控件(Label),按鈕控件(Button),文本框控件(TextBox)和格式文本控件(RichTextBox),感興趣的小伙伴們可以參考一下2016-05-05C#自定義序列化ISerializable的實(shí)現(xiàn)方法
這篇文章主要介紹了C#自定義序列化ISerializable的實(shí)現(xiàn)方法,涉及C#序列化的操作技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04常用.NET工具(包括.NET可再發(fā)行包2.0)下載
常用.NET工具(包括.NET可再發(fā)行包2.0)下載...2007-03-03C# 中實(shí)現(xiàn)ftp 圖片上傳功能(多快好省)
這篇文章主要介紹了C# 中實(shí)現(xiàn)ftp 圖片上傳功能(多快好省),需要的朋友可以參考下2017-06-06WPF拖動DataGrid滾動條時內(nèi)容混亂的解決方法
這篇文章主要介紹了WPF拖動DataGrid滾動條時內(nèi)容混亂的解決方法2016-10-10