مرحباً NetworkStream
الكاتب الأخ : أبو عابد
السلام عليكم ورحمة الله
احتجت لعمل تطبيق يقوم بالاتصال بأجهزة أخرى يعني Telnet
طبعاً الوضع مختلف عن VB6 فلا مكان للـ Winsock !!!
بدأت البحث في النت عن طريقة اتصل بها مع الأجهزة الأخرى ، و كانت الأصوت تدل على استخدام الـ Socket و وجدت الكثير يبحث عن أداة تقوم بعمل Winsock على بيئة الدوت نت .
قرأت عن الـ Socket فوجدت الموضوع لم يعجبني …
فكرت أن أتعاطي الـ VB6 لولا ستر الله علي
عاودت البحث عن حلول أخرى (وهذا من مميزات الـ .Net ) فوجدت ضالتي في الـ NetworkStream تحت فضاء الأسماء System.Net.Sockets
الموضوع بكل بساطة هو كالتالي :
نعرف كائن من TcpClient و كائن من NetworkStream
Dim oTcpClient As New System.Net.Sockets.TcpClient Dim oNetworkStream As Net.Sockets.NetworkStream
نقوم بعمل اتصال على الجهاز المطلوب ، ثم نسند قيمة الستريم لكائن الـ NetworkStream
oTcpClient.Connect(txtServer.Text, CInt(txtPort.Text)) oNetworkStream = oTcpClient.GetStream
هذا الكود يكتب تحت زر اتصال .
*** إذا أردنا أن نرسل بيانات للجهاز الآخر نكتب الكود التالي :
Dim bWriteBytes(oTcpClient.ReceiveBufferSize) As Byte If oTcpClient.Connected Then If oTcpClient.GetStream.CanWrite Then ReDim bWriteBytes(System.Text.Encoding.ASCII.GetBytes(txtCommand.Text & vbCrLf).Length) bWriteBytes = System.Text.Encoding.ASCII.GetBytes(txtCommand.Text & vbCrLf) oNetworkStream.Write(bWriteBytes, 0, bWriteBytes.Length) End If End If
هذا الكود يكتب تحت زر تنفيذ الأمر .
*** أما إذا أردنا أن نقرأ القيم العائدة من الجهاز الآخر نكتب الكود التالي :
If oNetworkStream.DataAvailable Then Dim bData(oTcpClient.ReceiveBufferSize) As Byte Dim intBuffer As Integer = oNetworkStream.Read(bData, 0, bData.Length) Dim strVal As String = Encoding.ASCII.GetString(bData, 0, intBuffer) txtResult.AppendText(strVal & vbNewLine) txtResult.Select(txtResult.TextLength, 1) End If
هذا الكود نضعه في مؤقت Timer يعمل كل ثانية ، بحيث يقرأ القيم الموجودة في المخزن و يظهرها على صندوق النص txtResult.
و صلى الله و سلم على نبينا محمد ،،