PDA

View Full Version : مشکل در برنامه نویسی سوکت: اطلاع از پایان یافتن دریافت دیتا در سرور



matrixrayaneh
جمعه 13 شهریور 1394, 16:54 عصر
سلام دوستان


من یه برنامه با سوکت نوشتم که در اون اطلاعات رو از کلاینت میخونم. تا اینجاش مشکلی نیست اما مشکل اینجاست که دو سری داده به سرور میاد که باید وقتی سری اول اومد یه پیغامی به کلاینت بفرستم تا اون کلاینت سری دوم رو هم بفرسته. مشکل اینجاست که نمیتونم پایان یافتن دریافت سری اول رو تو برنامه مشخص کنم. ممنون میشم راهنمایی بفرمایید. کد رو هم میذارم و اگه بشه با همین کد درستش کنم ممنون میشم.








Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Text


Public Class Frm_server


Private Server As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Private Virtual_Client As Socket
Public EndP As IPEndPoint
Dim t As Integer
Private Recived As [Byte]()


Private Sub Server_BeginAccept(Result As IAsyncResult)


Virtual_Client = Server.EndAccept(Result)
Recived = New [Byte](1) {} '([Byte].MaxValue - 1) {}
Virtual_Client.BeginReceive(Recived, 0, Recived.Length, SocketFlags.None, AddressOf Server_BeginRecived, Nothing)


End Sub


Private Sub Server_BeginRecived(Result As IAsyncResult)
Dim Recv As Integer = Virtual_Client.EndReceive(Result)


If Recv > 0 Then
SetText(Encoding.ASCII.GetString(Recived))


Virtual_Client.BeginReceive(Recived, 0, Recived.Length, SocketFlags.None, AddressOf Server_BeginRecived, Nothing) 'Server_BeginRecived
t += Recv
Else
MsgBox("Recivd End")
End If


End Sub


Private Delegate Sub SetTextCallBack(Text As String)


Private Sub SetText(Text As [String])
If TextBox1.InvokeRequired Then
Dim d As New SetTextCallBack(AddressOf SetText)
Me.Invoke(d, New Object() {Text})
Else
TextBox1.Text += (Text)
End If


End Sub


Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
EndP = New IPEndPoint(IPAddress.Parse(txt_ip.Text), 2010)


Server.Bind(DirectCast(EndP, EndPoint))
Server.Listen(-1)
Server.BeginAccept(AddressOf Server_BeginAccept, Nothing)
End Sub


Private Sub Frm_server_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txt_ip.Text = "127.0.0.1"
End Sub
End Class

ali_72
یک شنبه 19 مهر 1394, 07:12 صبح
کلاینتت چیه؟
اونم یه سیستم کامپیوتری هست یا یه دستگاه؟
این چیزی که توضیح دادی خیلی کلی هست
یعنی برنامه شما سرور هست؟ خوب پس در این صورت چند تا کلاینت داری؟ کلاینتات چیه؟ نحوه ارتباط چیه؟ وای فای یا usb؟
شبکه ای که سرور و کلاینت در اون قرار دارن چیه؟ توسط سرور ایجاد میشه؟ یا خود سرور هم باید به یه شبکه join شه؟
در این ارتباطات شما باید پروتکل درستی تعریف کنید
خوب برنامه شما مدام در حال گوش دادن هست
به محض اینکه داده ای دریافت کرد
باید داده را بررسی کند
در صورت نیاز به کلاینت پیغام مورد نظر را ارسال کند
تجربه من تو این زمینه میگه که اصل کدنویسی بسیار ساده هست
مهم پروتکل مورد استفاده و تعریف شده برای ارتباط است
امیدوارم تونسته باشم کمکی کنم
موفق باشید

matrixrayaneh
دوشنبه 20 مهر 1394, 10:21 صبح
ممنون از زاهنماییتون
برنامه من یک سرور هست گه قراره داده ها رو از یک دستگاه که به یک کامپیوتر وصله و از اون ارسال میشه رو بخونه
مشکل اینجاست که داده ها دریافت میشن اما نه کامل
به این صورت که داده ها به صورت بسته های پشت سر هم
من اولین بسته رو دریافت میکنم که حدودا 704 بایت هست
اما بقیه اش نمیاد
نمیدونم چرا
حتی با سمپل های مایکروسافت MSDN هم انجام دادم نشد

سیستمی که برنامه من روش نصبه وسیستمی که به دستگاه وصله مشابه هستن یعنی هردو رو یک سیستم نصب هستن
شبکه هم یک شبکه اداره هست که فکر نمیکنم چیز خاصی داشته باشه