Mishka87 פורסם 2011 במאי 26 Share פורסם 2011 במאי 26 היימקווה שתוכלו לעזור לי.ברשותי תוכנה, בעצם שתיים, צד שרט וצד לקוח, אני לוקח קובץ תמונה, ממיר אותו ל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()מה יכולה להיות הבעייה שלא תמיד לא כל המידע מגיעה לצד השני?תודה מראשמיכאל קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2011 במאי 26 Share פורסם 2011 במאי 26 תשים לב שהפונקציה read מחזירה לך INT - את מספר הבתים שהיא קראה בפועל.יכול להיות שבקריאה בודדת לא קיבלת את כל הבתים שלך, ולכן תצטרך לקרוא פעם נוספת - הפעם את מספר הבתים שנותרו לך.גם בקריאה השניה יכול להיות שלא חזרו לך כל הבתים שרצית, ולכן תצטרך לקרוא כבר בפעם השלישית ואף יותר. קישור לתוכן שתף באתרים אחרים More sharing options...
Mishka87 פורסם 2011 במאי 26 מחבר Share פורסם 2011 במאי 26 צודק.פעמים בודדות אני קורא את כל הביטים, לרוב חסרים כ10%, והתמונה עדיין נראת מלאה.הבעייה שבשליש מהזמן חסרים מעל חצי מהביטים.אני מצליח לחשב כמה חסרים, אבל כיצד אני קורא אותם ומצרף לאותם הניטים אותם קראתי קודם?מיכאל קישור לתוכן שתף באתרים אחרים More sharing options...
Mishka87 פורסם 2011 במאי 26 מחבר Share פורסם 2011 במאי 26 הצלחתי, תודה על העזרהלמעוניינים, הפתרון:החלפת שורת ה: 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מיכאל קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2011 במאי 27 Share פורסם 2011 במאי 27 הערה: את הקוד שאתה מדביק, שים בתוך תג קוד (כפתור אחד ימינה מתג ציטוט). קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.