تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلتين في أرسال بأداة Socket
#1


أخواني

لدي مشكلتين في Socket

الأولى : أريد أرسال Object كامل إلى الجهاز الأخر باستخدام TCP/IP [تم الحل]

أخذت مثال من موقع أجنبي وحاولت تطبيقه ولاكن لا فائدة لا يتم الأرسال يحدث خطأ ( الموقع من هنا ) رقم المشاركه ( 2 )

ثانيا : أريد أرسال تعليمة تدل على الرسالة إللي بتوصل هل هي Object أم أمر [b][SIZE=4][تم الحل]


[/b][/SIZE]توضيح :-- يعني الأن أرسلت رسالة للطرف الأخر عباره عن مصفوفه تحمل بيانات ومعها تعليمة مثلا كلمة Obj
الطرف الأخر بمجرد قراءة التعليمة سيعرف بأن البيانات التي سوف تصل الأن عباره عن Object بسبب ان التعليمة أتت بكلمة Obj
وعندما أرسل تعليمة مثلا كلمة End Now بمجرد ان تصل إلى الطرف الأخر ويقرأ انها كلمة End Now يقوم تلقائي بتنفيذ أمر التالي


PHP كود :
Me.Close() 


وشكرا لكم ..


أخوكم




[/HR]تم الحل من قبل الأخ Sajad

ألف شكر له

رقم المشاركه التي تحتوي على مثال فيه حل جميع النقاط هي 22#


Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:
#2
عفوا نسيت لأوضح شيء

الموقع الأجنبي حاط مثال بـ C# وانا حولته للـ VB.Net
لاني أستخدم VB.Net

التحويل مافيه إي مشاكل

المثال بعد ماقمت بتجربته وتحويله إلى VB.Net موجود بالمرفق

أبي حل للمشكله حتى لو كان الحل بلغة C# عادي ولاكن الأفضل يكون vb.Net

وشكرا


الملفات المرفقة
.rar   تجربة TCP IP.rar (الحجم : 125.27 ك ب / التحميلات : 44)
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:
#3
[COLOR="#A52A2A"]السلام عليكم

اخي العزيز انظر هذا الموضوع http://vb4arb.com/vb/showthread.php?4445...#post15675

بالتوفيق ان شاءالله[/COLOR]
الرد }}}
تم الشكر بواسطة:
#4
sajad كتب :السلام عليكم

اخي العزيز انظر هذا الموضوع http://vb4arb.com/vb/showthread.php?4445...#post15675

بالتوفيق ان شاءالله

شكرا أخي الكريم
قبل شوي كنت أقراءه
وسأحاول فهمه كامل الموضوع ومن ثم تحويله إلى Vb.Net
ومن ثم تطبيقه وسأرد لكم بالنتيجة
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:
#5
[COLOR="#B22222"]السلام عليكم

وفقك الله ان شاءالله سأقوم برفع مثال في نفس الموضوع الان

بارك الله فيك[/COLOR]
الرد }}}
تم الشكر بواسطة:
#6
قمت بقراءة الكود والتعني عليه
ومن ثم حولته إلى VB.Net وإلى هنا أوك

ولاكن عند الإرسال تظهر رسالة تفيد بإن تم وصول البيانات
ولا وصل بيانات ولا شيء :confused:



وكأنه يتخطى جميع البيانات ومن ثم يصل إلى كود عرض الرسالة Sad

قمت برفق المثال إللي سويته من موضوعك بعد ما حولته إلى Vb.Net

أرجوا الإطلاع عليه


الملفات المرفقة
.zip   تجربة SendObjcte.zip (الحجم : 151.79 ك ب / التحميلات : 54)
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:
#7
السلام عليكم

جرب هذا الكود للReceive

PHP كود :
Imports System
Imports System
.Collections.Generic
Imports System
.ComponentModel
Imports System
.Data
Imports System
.Drawing
Imports System
.Linq
Imports System
.Text
Imports System
.Windows.Forms
Imports System
.Runtime.Serialization.Formatters.Binary
Imports System
.IO
Imports System
.Net.Sockets
Imports System
.Net
Imports System
.Threading
Imports System
.Reflection
Imports StudentInfo

Namespace ReceiveAnObject
    
Public Partial Class Form1
        Inherits Form
        
Private th As Thread
        
Private listen As TcpListener
        
Private ns As NetworkStream
        
Private bf As BinaryFormatter
        
Private sok As Socket
        
Private stdinfo As SerializeStdInfo

        
Public Sub New()
            
InitializeComponent()
            
th = New Thread(New ThreadStart(AddressOf Receive_Info))
            
th.Start()
        
End Sub

        
Private Sub get_info()
            
Me.Invoke(New MethodInvoker(Sub() 
            
idtxt.Text stdinfo.id.ToString()
            
nametxt.Text stdinfo.name
            agetxt
.Text stdinfo.age.ToString()
            
depttxt.Text stdinfo.dept
            avgtxt
.Text stdinfo.avg.ToString()
            
label6.Text "Data have been received!"

End Sub))
        
End Sub

        
Private Sub Receive_Info()
            
'Creating a new instance of class TcpListener
            listen = New TcpListener(IPAddress.Any, 9000)
            '
Start Listening
            listen
.Start()
            
'Infinite loop
            While True
                '
Accept the connecting
                sok 
listen.AcceptSocket()
                
'Creating a  new instance of class NetworkStream
                ns = New NetworkStream(sok)
                '
Creating a new instance of class BinaryFormatter
                bf 
= New BinaryFormatter()
                
'Deserializing the Stream into the Object (Class)
                stdinfo = DirectCast(bf.Deserialize(ns), SerializeStdInfo)
                '
Getting the deserialized data
                get_info
()
                
'Release the stream
                ns.Flush()
                '
Close the stream
                ns
.Close()
            
End While
        
End Sub

        
Private Sub Form1_FormClosed(sender As ObjectAs FormClosedEventArgs)
            
th.Abort()
            
listen.[Stop]()
        
End Sub
    End 
Class
End Namespace 

المثال يعمل معي بالسي شارب ولم استطع تحميل المثال الذي ارفقته لكن ساحاول ان احمله واجرب
الرد }}}
تم الشكر بواسطة:
#8
ظهرت أخطاء كثيره

ياليت ترفق لي المثال إللي أشتغل معك حتى أطلع عليه
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:
#9
السلام عليكم

اخي العزيز لقد ارفقت المثال بلغة الvb للمرسل والمستلم في نفس الموضوع في قسم مفالات السي شارب
الرد }}}
تم الشكر بواسطة:
#10
أولا: أحب أن أهنئك على المثال الخطير بالفعل أشتغل 100%
وأحب إيضا أن أشكركـ على متابعه الموضوع والمساعدة

ثانيا: أنا فعلا شغلته وأشتغل معي 100% ولاكن يوجد بعض الحواجز الذي واجهتها ألا وهي:
1- أعطيتني ملف DLL وفيه الأجراءات وانا بحاجه للملف لأرى طريقة التحويل من أهم الأجزاء قمت بوضعه في ملف مغلق Sad
2- هذا المثال يقتضي على تحويل حسب ما قرأته بموضوعك على قطعه قطعه إي يقوم بتحويل ID وبعدين يقوم بتحويل Name وهكذا
طيب لنفرض ان لدي مصفوفه لامحدوده وقمت بإرسالها أو قمت بإرسال صوره أو قمت بإرسال متغير أو ثابت بغض النظر على نوعه هنا سأقوم بوضع لكل شيء إجراء

ولاكن يوجد لدي فكره بسيطه وواجهتني مشكله إيضا بسيطه أبسط من حجم الفكره إلا وهي تحويل Object بذاته إلى بينري وأستقبال بينري وأرجاعه إلى Object بغض النظر عن نوع Object الآتي
هو مصفوفه أم صوره أم متغير أم ثابت إلخ..

يوجد لدي إجراءان الأول تحويل Object إلى Byte

C#

PHP كود :
private byte[] ObjectToByteArray(Object obj)
{
    if(
obj == null)
        return 
null;
    
BinaryFormatter bf = new BinaryFormatter();
    
MemoryStream ms = new MemoryStream();
    
bf.Serialize(msobj);
    return 
ms.ToArray();


VB

PHP كود :
Private Function ObjectToByteArray(obj As [Object]) As Byte()
        If 
obj Is Nothing Then
            
Return Nothing
        End 
If
        
Dim bf As New BinaryFormatter()
        
Dim ms As New MemoryStream()
        
bf.Serialize(msobj)
        Return 
ms.ToArray()
    
End Function 


الثاني يقوم بعكس العملية يحول من Byte إلى Object

C#
PHP كود :
private Object ByteArrayToObject(byte[] arrBytes)
{
    
MemoryStream memStream = new MemoryStream();
    
BinaryFormatter binForm = new BinaryFormatter();
    
memStream.Write(arrBytes0arrBytes.Length);
    
memStream.Seek(0SeekOrigin.Begin);
    
Object obj = (Object) binForm.Deserialize(memStream);
    return 
obj;


VB

PHP كود :
Private Function ByteArrayToObject(arrBytes As Byte()) As [Object]
        
Dim memStream As New MemoryStream()
        
Dim binForm As New BinaryFormatter()
        
memStream.Write(arrBytes0arrBytes.Length)
        
memStream.Seek(0SeekOrigin.Begin)
        
Dim obj As [Object] = DirectCast(binForm.Deserialize(memStream), [Object])
        Return 
obj
    End 
Function 


إلى هنا جميل جدا

قمت بتجربة الكود وشغال 100% أنظر إلى تجربتي
( 1 )



( 2 )




( 3 )



( 4 )


حلو تم العمليه بدون إي مشاكل
الأن المطلوب هذي العمليه إدخالها في برنامج الأرسال

أبي أرسل B الذي هو نوعه Byte
وأبي أستقبل B الذي هو نوعه Byte

فقط لا غير ..

في مثالك السابق لايقبل الإرسال إلى من نوع Object وانا أبي ارسل من نوع Byte
وأبي أستقبل من نوع Byte حتى أستطيع إدخالها في إجراءاتي التي طبقتها في السابقه وبدون إي مشاكل

إذا كنت تتسائل عن إستخدامي لهذي الطريقه فالجواب لان هذي الطريقه تضمن لي بإرسال صوت - صوره - فيديو - ملف - مصفوفه - مصفوفه ثنائيه - متغير أو ثابت بشتا انواعها إلخ.. وكل هذا بكود واحد دون اللجوا لعدت أكواد
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم