פורסם 2011 במאי 2614 שנים היימקווה שתוכלו לעזור לי.ברשותי תוכנה, בעצם שתיים, צד שרט וצד לקוח, אני לוקח קובץ תמונה, ממיר אותו לbyte array ושולח דרך הקוד שנמצא למטה.בצד השיני אני מקבל את המידע, מפענח אותו, ומציג כתמונה.עקרונית התוכנה עובדת, הבעייה היא שלא כל פעם כל התמונה נשלחת, כשליש מהמקרים אני מקבל רק חלק מהתמונה.לאחר בדיקות אני משוכנע שהבעייה היא בשלב של השליחה, ולא קריאת הקובץ או הצגת התמונה.הקוד השולח: Dim tcpClient As New System.Net.Sockets.TcpClient() Try tcpClient.Connect("127.0.0.1", 8001) Dim networkStream As NetworkStream = tcpClient.GetStream() If networkStream.CanWrite And networkStream.CanRead Then 'Get Data To Send Dim sendBytes As Byte() = ConvertFromPictureBoxToArray() 'Get size of Data Dim len As Long = sendBytes.Length '76544 byte Dim Bitelen() As Byte = BitConverter.GetBytes(len) 'Send The Size Of Data networkStream.Write(Bitelen, 0, Bitelen.Length) 'Send The Data networkStream.Write(sendBytes, 0, len) End If networkStream.Close() tcpClient.Close() Catch ex As Exception End Tryהקוד המקבל: Dim tcpListener As New TcpListener(8001) tcpListener.Start() While (True) Try If tcpListener.Pending Then Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient() 'Read the stream into a byte array Dim networkStream As NetworkStream = tcpClient.GetStream() 'Read The Size Of Data Dim len As Long Dim byteLen( 8) As Byte networkStream.Read(byteLen, 0, 8) len = BitConverter.ToInt64(byteLen, 0) 'Read The Data Dim bytes(len) As Byte networkStream.Read(bytes, 0, len) 'Handle The Data ConvertFromArrayToPictureBox(bytes) networkStream.Close() tcpClient.Close() End If Catch Ex As Exception End Try End While tcpListener.Stop()מה יכולה להיות הבעייה שלא תמיד לא כל המידע מגיעה לצד השני?תודה מראשמיכאל
פורסם 2011 במאי 2614 שנים תשים לב שהפונקציה read מחזירה לך INT - את מספר הבתים שהיא קראה בפועל.יכול להיות שבקריאה בודדת לא קיבלת את כל הבתים שלך, ולכן תצטרך לקרוא פעם נוספת - הפעם את מספר הבתים שנותרו לך.גם בקריאה השניה יכול להיות שלא חזרו לך כל הבתים שרצית, ולכן תצטרך לקרוא כבר בפעם השלישית ואף יותר.
פורסם 2011 במאי 2614 שנים מחבר צודק.פעמים בודדות אני קורא את כל הביטים, לרוב חסרים כ10%, והתמונה עדיין נראת מלאה.הבעייה שבשליש מהזמן חסרים מעל חצי מהביטים.אני מצליח לחשב כמה חסרים, אבל כיצד אני קורא אותם ומצרף לאותם הניטים אותם קראתי קודם?מיכאל
פורסם 2011 במאי 2614 שנים מחבר הצלחתי, תודה על העזרהלמעוניינים, הפתרון:החלפת שורת ה: networkStream.Read(bytes, 0, len)ב:Dim numBytesToRead As Integer = len Dim numBytesRead As Integer = 0 While (numBytesToRead > 0) Dim n As Integer = networkStream.Read(bytes, numBytesRead, numBytesToRead) If (n = 0) Then Exit While numBytesRead = numBytesRead + n numBytesToRead = numBytesToRead - n End Whileמיכאל
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.