منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [سؤال] اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها (/showthread.php?tid=2492)



اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - سعود - 07-04-14

كود :
Imports System.IO
Imports System.Net.Sockets
Imports System.Net

Public Class Form1
    Dim ofd As New OpenFileDialog
    Dim listener As TcpListener
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ofd.Filter = "Jpg(*.jpg)|*.jpg|png (*.png)|*.png|gif (*.gif)|*.gif"
        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim mypic_path As String = ofd.FileName
            PictureBox1.Image = Image.FromFile(mypic_path)
            Dim ms As MemoryStream = New MemoryStream
            PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
            Dim arrImage As Byte() = ms.GetBuffer
            ms.Close()
            Dim myclient As TcpClient = New TcpClient("192.168.1.2", 9999)

            Dim myns As NetworkStream = myclient.GetStream
            Dim mysw As BinaryWriter = New BinaryWriter(myns)
            mysw.Write(arrImage)
            mysw.Close()
            myns.Close()
            myclient.Close()
        End If

    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        listener = New TcpListener(IPAddress.Any, "9999")
        Dim athread As New Threading.Thread(AddressOf list)
        athread.Start()
    End Sub
    Private Sub list()
        listener.Start()
    End Sub
     Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If listener.Pending Then
            Dim mysocket = listener.AcceptSocket
            Dim myns = New NetworkStream(mysocket)
            PictureBox2.Image = Image.FromStream(myns)
        End If
    End Sub
End Class



RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - سعود - 07-04-14

اللي اقصده مثل برامج المحادثة حين يرسل صورة يعطيه خيار بالتحميل او التجاهل
------
طيب لو حبيت انه بمجرد ان يوافق باستقبال الصورة اريدها تظهر في اداة richtextbox


RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - Aly El-Haddad - 07-04-14

لإعطاء خيار التحميل من عدمه:
كود :
If listener.Pending Then
            If MessageBox.Show("A photo has been sent to you, do you want to recieve it?", "Confirmation", MessageBoxButtons.YesNo) = System.Windows.Forms.DialogResult.Yes Then
                Dim mysocket = listener.AcceptSocket
                Dim myns = New NetworkStream(mysocket)
                PictureBox2.Image = Image.FromStream(myns)
            End If
        End If

أما لإظهار صورة في RichTextBox فهناك طريقتين

السهلة:
كود :
My.Computer.Clipboard.SetImage(PictureBox2.Image)
        RichTextBox1.Paste(Windows.Forms.DataFormats.GetFormat(System.Windows.Forms.DataFormats.Bitmap))

الصعبة:
إيجاد الـFormat المناسب للكلام مع الصورة و وضعه في خاصية Rtf للـRichTextBox


RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - الشاكي لله - 07-04-14

في برامج نقل البيانات

انا افضل بدل نقل بيانات عشوائية ان تقوم بانشاء struct وتملأه بالبيانات وتحوله الى Byte array بواسطة Serialize

والجهة المستقبلة تسوي Deserialize وتسترجع الstruct من الbyte array


يعني اولا تسوي Class او يفضل عمل تركيب (struct)
ونجعله يدعم مبدأ الSerializable باضافة المواصفة :


PHP كود :
<Serializable_
Public Structure Message
    
'variable'
    
Public RtfMessage As String
    
Public senderName As String
    
Public image As Image Nothing


    
'constractor'
    
Public Sub New(RtfMessage As StringsenderName As Stringimage As Image)
        
Me.RtfMessage RtfMessage
        Me
.senderName senderName
        Me
.image image
    End Sub
End Structure 



ثانيا نستعمل الstruct وبعدين نحوله الbyte array بواسطة Serializa عشان نرسله بواسطة دالة Send :

PHP كود :
Private Sub sendButton_Click(sender As ObjectAs EventArgs)
    
Dim msg As New Message("<b>Hello i'm Mohammed""Ali"Nothing)

    
Dim msgData As Byte() = ToByteArray(msg)

    
mySock.Send(msgData)
End Sub


Public Function ToByteArray(source As Object) As Byte()
    
Dim formatter = New BinaryFormatter()
    
Using stream = New MemoryStream()
        
formatter.Serialize(streamsource)
        
Dim data As Byte() = stream.ToArray()
        
stream.Close()
        Return 
data
    End Using
End 
Function 




--

الان الجهة المستقبلة ببساطة يمكنها ارجاع الbyte array الى الobject الاصلي وقراءة الرسالة :-

PHP كود :
Private Sub receiveMessages_Click(sender As ObjectAs EventArgs)
    While 
True
        
'قراءة البيانات'
        
Application.DoEvents()
        
Dim buffer As Byte() = New Byte(999999) {}
        
Dim totalReceived As Integer mySock.Receive(buffer)


        
'اكبر من البيانات التي تم استلامها bufferقد تكون قيمة '
        'بعد اعادة كتابتها بصورة صحيحة msgData فهنا يتم حفظ البيانات في المتغير '
        
Dim msgData As Byte()
        
Using rw As New MemoryStream()
            
rw.Write(msgData0totalReceived)
            
rw.Close()
        
End Using


        
''ارجاع الرسالة الى التركي'
        Dim msg As Message = DirectCast(ToObject(msgData), Message)


        '
قراءة الرسالة'
        richTextBox1.Rtf = msg.RtfMessage
        MessageBox.Show("This Message was received from : " + msg.senderName)
        If msg.image IsNot Nothing Then
            pictureBox1.Image = msg.image
        End If
    End While
End Sub


Public Function ToObject(source As Byte()) As Object
    Dim formatter = New BinaryFormatter()
    Using stream = New MemoryStream(source)
        stream.Position = 0
        Dim obj As Object = DirectCast(formatter.Deserialize(stream, Nothing), [Object])
        stream.Close()
        Return obj
    End Using
End Function 



RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - سعود - 08-04-14

بارك الله فيكم جميعا اخواني الاعزاء
اخي Aly El-Haddad بالنسبة للتنصت قد يكون نص وليست صورة فكيف افرق بينهما.
لاني الان اجرب بمشروع مستقل يعني ارسل صورة واتحقق كما تفضلت الامر هنا يبدو جيدا.
لكن كيف لو حبيت اضيف كود ارسال صورة الى المشروع الاساسي بحيث التنصت على المنفذ واحد اي مسموح باجراء واحد فقط.
ارسال الصورة بلا شك ليس مدموج وانما من زر امر مستقل.
ماهي الطريقة؟
ام انها تريد حيلة Smile
ارجو الرد فبصراحة استخدام التحايلات ليس جيد.
ايضا هل يمكن استبدال مربع الرسالة بنص عادي يتم رسمه على اداة الـ Richtextbox وحين الضغط على نعم يتم السماح.
.
.
بارك الله فيكم جميعا.


RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - الشاكي لله - 08-04-14

(08-04-14, 01:08 AM)سعود كتب : بارك الله فيكم جميعا اخواني الاعزاء
اخي Aly El-Haddad بالنسبة للتنصت قد يكون نص وليست صورة فكيف افرق بينهما.
لاني الان اجرب بمشروع مستقل يعني ارسل صورة واتحقق كما تفضلت الامر هنا يبدو جيدا.

لكن كيف لو حبيت اضيف كود ارسال صورة الى المشروع الاساسي بحيث التنصت على المنفذ واحد اي مسموح باجراء واحد فقط.
ارسال الصورة بلا شك ليس مدموج وانما من زر امر مستقل.
ماهي الطريقة؟
ام انها تريد حيلة Smile
ارجو الرد فبصراحة استخدام التحايلات ليس جيد.
ايضا هل يمكن استبدال مربع الرسالة بنص عادي يتم رسمه على اداة الـ Richtextbox وحين الضغط على نعم يتم السماح.
.
.
بارك الله فيكم جميعا.


راجع ردي جيدا



RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - سعود - 08-04-14

اخي الشاكي بارك الله فيك اعلم انك انسان مبدع ومتبحر باي مجال تشارك به..لكن الاشكال عندي انه ليس لدي قدرة على فهم اكواد لغة اخرى غير فيجوال بيسك لكن باذن الله ساحاول معتمدا على مواقع التحويل
شكرا لك اخي


RE: اذا استقبلت صورة بهذه الطريقة كيف اعطي المستخدم خيار بتحميلها او تجاهلها - الشاكي لله - 08-04-14

(08-04-14, 01:50 AM)سعود كتب : اخي الشاكي بارك الله فيك اعلم انك انسان مبدع ومتبحر باي مجال تشارك به..لكن الاشكال عندي انه ليس لدي قدرة على فهم اكواد لغة اخرى غير فيجوال بيسك لكن باذن الله ساحاول معتمدا على مواقع التحويل
شكرا لك اخي

اسف يالغالي مانتبهت يوم حطيت الكود

حولت لك الرد الى الفيجوال بيسك