تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 3 از 4 اولاول 1234 آخرآخر
نمايش نتايج 21 به 30 از 34

نام تاپيک: کار کردن با سوکت در asp.net

  1. #21
    حـــــرفـه ای dogtag's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    مرز غربی تهران بزرگ! ایمیل: goodboy.php@gmail.com اسپم ها: 2,200!!! :دی
    پست ها
    2,277

    پيش فرض

    ممنون
    الان دانلودش می کنم

  2. #22
    پروفشنال sari-1369's Avatar
    تاريخ عضويت
    Nov 2007
    محل سكونت
    ساري
    پست ها
    766

    پيش فرض

    سلام
    میبخشید طول کشید، هر کاری کردم، وقتم خالی پیدا نکردم....
    نمونه جدید، کامل نیست
    ولی دیدم اگر بخواهم صبر کنم تا کاملش کنم، شاید خیلی....
    البته چندان هم ناقص نیست، بهتر است ببینید.
    کلاینتها بدون هیچ مشکلی میتوانند با هم ارتباط داشته باشند.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشید.


    متأسفانه در حال حاضر فایل مورد درخواست شما برای دانلود موجود نیست !
    این مسئله ممکن است موقتی یا دائمی باشد و یا به علت عدم استقبال و دانلود از آخرین تاریخ دانلود باشد.




  3. #23
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    شما میتوانید آخرین نسخه را همراه با PDF فارسی از لینک زیر دانلود کنید:
    h02.ir/Download.aspx?File=SampleSocketChat.zip

    تاپیک:
    forum.p30world.com/showthread.php?t=276352

  4. #24
    در آغاز فعالیت
    تاريخ عضويت
    Apr 2010
    محل سكونت
    تهران-نارمك
    پست ها
    6

    پيش فرض

    سلام دوستان
    من تازه در اين سايت ثبت نام كردم و از اين تاپيك خيلي خوشم اومد چون يكي از مشكلات اصلي من بود و هست.
    من چند تا سوال دارم:
    اول اينكه من يه برنامه تحت وب نياز دارم كه يه سري دستورات به يك application بر روي يك سرور داده و جواب اون رو روي سايت نمايش بده. مثلا وب ميگه سلام و جواب مياد عليك سلام كه اين جواب بايد روي سايت نمايش داده بشه.
    برنامه اي كه من نوشتم اولين پيغام رو درست ميفرسته و جواب هم برميگرده ولي اولا نميتونم جواب رو روي صفحه نمايش بدم كه واسه اين كار مجبور شدم پيغام رو روي يك فايل ذخيره كنم و بعد تو تايمر صفحه رفرش بشه كه اصلا از اين كار خوشم نمياد.
    ثانيا مشكل در پيغام فرستادن بعدي هست. وقتي پيغام اول ميره و صفحه رفرش ميشه، تمامي پيغامها ريسيو ميشن ولي واسه فرستادن پيغام جديد ميگه كانكشن بسته است و وقتي كانكشن رو دوباره باز ميكنم يك كانكشن جديد ايجاد ميشه و همه چي بهم ميريزه.
    ميشه اولا خواهش كنم يه مثال برام بفرستيد و ثانيا بهم بگيد مشكل من كجاست؟
    واقعا ممنون ميشم

  5. #25
    در آغاز فعالیت
    تاريخ عضويت
    Apr 2010
    محل سكونت
    تهران-نارمك
    پست ها
    6

    پيش فرض

    باز هم سلام
    گفتم بهتره كد برنامه ام رو براتون بفرستم اونجوري بهتر ميشه نظر داد

    Imports System
    Imports System.Text
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.IO
    Partial Class WebForm1
    Inherits System.Web.UI.Page
    Dim Client As New TcpClient
    Dim BufferSize(Client.ReceiveBufferSize - 1) As Byte
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Client.Connect("127.0.0.1", 80)
    SendMessage("Hello")
    Client.GetStream().BeginRead(BufferSize, 0, BufferSize.Length, AddressOf ReceiveMessage, Nothing)
    End Sub
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    SendMessage("Hello2")
    End Sub
    Public Sub SendMessage(ByVal message As String)
    Try
    Dim netStr As NetworkStream = Client.GetStream()
    Dim Data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
    netStr.Write(Data, 0, Data.Length)
    netStr.Flush()
    Catch ex As Exception
    Console.WriteLine(ex.ToString())
    End Try
    End Sub
    Public Sub ReceiveMessage(ByVal ar As IAsyncResult)
    Dim bufferLength As Integer
    Dim message As String
    Try
    SyncLock Client.GetStream
    bufferLength = Client.GetStream().EndRead(ar)
    End SyncLock
    If bufferLength < 1 Then
    Client.Close()
    End If
    message = System.Text.Encoding.ASCII.GetString(BufferSize, 0, bufferLength).ToString()
    Console.WriteLine(Client.Client.RemoteEndPoint.ToS tring() + "-> " + message)
    Client.GetStream().BeginRead(BufferSize, 0, BufferSize.Length, AddressOf ReceiveMessage, Nothing)
    Catch ex As Exception
    Console.WriteLine(ex)
    Client.Close()
    End Try
    End Sub
    End Class
    تو كد بالا پيغام اول كه زمان لود صفحه هست درست منتقل ميشه و برنامه شروع به گرفتن جوابها ميكنه.
    تا اينجا درسته ولي اولا پيغام دوم (Hello2) وقتي ميخواد Send بشه ميگه كانكشن بسته است. درحالي كه كانكشن بر روي برنامه سرور بازه. وقتي دوباره كانكت ميزنم تعداد كانكشنها بر روي برنامه سرور ميشه ٢ تا و الي آخر.
    مشكل دوم اينه كه پيغامي كه تو receive message مياد كه تو متغير message نگهداري ميشه رو نميتونم روي صفحه وب نمايش بدم. از delegate هم استفاده كردم ولي نشد.
    ممنون ميشم راهنماييم كنيد.

  6. #26
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    اول اينكه من يه برنامه تحت وب نياز دارم كه يه سري دستورات به يك application بر روي يك سرور داده و جواب اون رو روي سايت نمايش بده. مثلا وب ميگه سلام و جواب مياد عليك سلام كه اين جواب بايد روي سايت نمايش داده بشه.
    توضیحاتتان ناقص است و محیط و نحوه استفاده شما را مشخص نمیکند.

    آیا چیزی مشابه چت در یک سایت میخواهید راه اندازی کنید؟
    برنامه winapp که ندارید بخواهد به سایتی وصل شود (چون انوقت نمایش در سایت بی معنی میشود!) ؟

    اگر چیزی مشابه چت در خود یک سایت میخواهید اصلاً نیازی به برنامه نویسی سوکت ندارید!
    شما با کمک Ajax و برنماه نویسی عادی ASP.Net می توانید این کار را انجام دهید.
    یک سایت که برای ارتباط با خودش نیازی به سوکت ندارد.

    بهرحال من هنوز متوجه نشدم طرح دقیق شما چیست و با کاربر چطور رابطه برقرار میکند.

    =====

    لازم به ذکر است که بد هم نبود یک تاپیک مجزا و جدید در سطح انجمن میزدید ...
    شب خوش.

  7. #27
    در آغاز فعالیت
    تاريخ عضويت
    Apr 2010
    محل سكونت
    تهران-نارمك
    پست ها
    6

    پيش فرض

    سلام H2 جان
    از جوابتان ممنونم، واقعيتش طرح اصلي من گرفتن قيمت ارزها از بانكهاي خارجي هست. مثل همون چيزي كه در فاركس وجود داره.
    براي اين كار كدي از نوع string وجود داره كه وقتي اون رو به آي پي و پورت مورد نظر كه بانك تعريف كرده ميفرستي در جواب قيمت ارز براتون فرستاده ميشه. همينطور دستورات ديگري در رابطه با ميزان معامله و ... هم وجود داره كه با فرستادن اونها جوابها بر ميگرده.
    اين كار رو با Application به راحتي انجام ميدم و مشكلي نداره يعني هرچيزي كه ميفرستم جواب به درستي برميگرده ولي هدف من اينه كه اين اطلاعات رو بر روي صفحه وب سايت نمايش بدم.
    برنامه اي هم كه با asp.net نوشتم تا حدودي اين كار رو ميكنه ولي چندتا مشكل داره.
    اول اينكه وقتي يك tcpclient ايجاد ميكنم و كانكشن رو برقرار ميكنم اولين string من به راحتي فرستاده ميشه و بعد از اون برنامه به حالت BeginRead سوكت ميره. خب تا اينجا همه چي درسته و جواب هم به درستي از طرف بانك برميگرده و خونده ميشه. ولي اين جواب رو نميتونم رو صفحه وب نمايش بدم. ميدونم كه بايد از Delegate استفاده كنم ولي نميتونم جواب بگيرم. نميخوام جواب رو هم به صورت فايل يا چيز ديگه اي save كنم چون بعضي از جوابها محرمانه و فقط مخصوص اون كلاينت خاص هستش.
    مشكل دوم اينكه براي فرستادن String بعدي پيغام ميده كه كانكشن بسته است. در حالي كه كانكشن بازه و پيغامهاي بعدي كه از طرف بانك ميان خونده ميشن يعني انگار كانكشن من فقط در حالت خوندن پيغامها قرار ميگيره و من ديگه هيچ دسترسي يه اون كانكشن ندارم و مشكل اينه كه حتي نميتونم ببندمش و دائما سرور من در حالت خوندن پيغامها قرار ميگيره. وقتي هم كه مجدد اين كار رو ميكنم تعداد كانكشن بر روي بانك ميشه دوتا. يعني كانكشن قبلي من همون طور باز مونده و داره جوابها رو ميگيره.
    نميدونم تونستم منظورمو برسونم يا نه.
    در ضمن من بخاطر جوابهاي بسيار زيبايي كه به دوست قبليمون در اين تاپيك داديد خواستم كه بحث قبلي كامل بشه و اگر صلاح بدونين تاپيك جديد ايجاد كنم.
    با تشكر فراوان - فقط نارمك

  8. #28
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام

    خوب پس استفاده شما از سوکت منطقی بوده.
    اگر مایل بودید مثال و pdf ای در خصوص برقراری ارتباطات سوکتی میتوانید در تاپیک زیر پیدا کنید:
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    =====

    ولي اين جواب رو نميتونم رو صفحه وب نمايش بدم
    راحت ترین راه برای این مشکل برقراری ارتباط سوکت با همان ریسمان صفحه aspx و تحت همان صفحه است.

    براي فرستادن String بعدي پيغام ميده كه كانكشن بسته است
    راه حل این یکی دقیقاً برعکس قبلی است!
    یعنی سوکت شما نباید تحت ریسمان و دامین کاری همان aspx اجرا و باز شود.

    =====

    خوب دو تا مشکل دارید که جواب هر یک مخالف دیگری است ولی مشکلی وجود ندارد یک راه حل شرطی و یک راه حل قطعی دارد.

    الف) راه حل شرطی اول:
    من با هدر های ارتباطی سهام شما آشنا نیستم و برای همین گفتم شرطی ...
    اگر لزوم Connect بودن سوکت برای ارتباطات بعدی (همان سوال و جواب خودتان) مهم نیست...
    - Timeout زمان کاری ریسمان درخواست های httphandler را افزایش دهید.
    - سوکت را با دستورات Using در همان ریسمان و محیط کاری فایل aspx باز کنید و داده را با Send فرستاده و جواب را با Read بگیرید را سوکت را کلاً ببندید و تمام. (توجه کنید نگفتم BeginSend و BeginRead)

    پس اگر ارتباطات شما از نظر سرور وابسته به تبادلات قبلی نیست، هر بار سوکت را باز کنید و سوالتان را بپرسید و ببندید.

    ب) راه حل نهایی:
    ولی در برخی ارتباطات Connect بودن سوکت در کل ارتباطت مهم است و اطلاعات مبادله شده قبلی روی مبادلات جدید تاثیر خواهد داشت.

    راه حل قطعی و خوب و کامل این قضیه آنجا است که ...
    - شما یک ماژول جامع ارتباطلات غیر همزمان مخصوص کار ناهمران با ASP.Net و Ajax طراحی کنید.
    - کلاس ماژول شما باید قابلیت مدیریت همزمان چندین مکالمه جداگانه Server-Client را داشته باشد.
    - و با کمک دستورات lock و synclock مناسب قابلیت کامل استفاده و دسترسی همزمان از چندین ریسمان مختلف را داشته باشد.
    و ...

    یعنی چیزی شبیه این الگو ...
    1) شما در این ماژول جامع متدی برای ارسال اطلاعات به صورت نا همزمان خواهید داشت که اطلاعات ارسالی را میگیرد و فقط یک عدد int یا long و... به عنوان کد پیگیری مانند پس میدهد...
    (مشابه مکانیزم خود ویندوز در API های دسترسی به فایل ها و رجیستری و... که پس از باز کردن مدخل یک کد اشاره گر 32 یا 64 بیتی برای اعمال بعدی پس میدهد)

    2) ریسمان صفحه aspx منتظر ارسال کامل اطلاعات و دریافت پاسخ و... نخواهند ماند و کد اشاره گر یا پیگیری یا هر اسم دیگر را گرفته و به کدهای javascript برای ارتباط Ajax تحویل میدهد.

    3) کدهای javascript برنماه در کلاینت در یک پریود زمانی مدام به سرور و یک httphandler مشخص که برای این منظور در نظر گرفته شده وصل میشود و سعی میکند کد اشاره گر یا پیگیری و... را که دارد بدهد و جواب را اگر آماده است بگیرید و نمایش دهد.
    (میتوان از کنترلر Ajax-Timer خود asp.net هم استفاده کرد.)

    4) برای مکالمات مرتبط بعدی و بستن نهایی ارتباط و... هم از همان هندلر یا اشاره گر یا کدپیگیر اولیه استفاده خواهد شد و با دادن این کد ماژول مرکزی در Collection ای دارد به نمونه سوکت و بافر و... همان ارتباط دسترسی پیدا خواهد کرد و...

    5) اگر کدهای ان عدد اشاره گر یا پیگیری پشت سر هم هستند میتوان برای امنیت بیشتر و جلوگیری از شنود ارتباطات توسط یک فرد خاص یک عدد password شانسی را هم برای هر ارتباطات در کنار کد مورد بحث قرار داد.

    و...

    توضیحات شاید به نظر زیاد بیاید ولی اگر درک کنید و اطلاعات مناسب از برنامه نویسی دات نت داشته باشید، کار چندان مشکلی نیست و حتی شاید با یک روز وقت (6 یا 7 ساعت) هم بتوان نمونه هسته و مازول اصلی مناسب و خوبی نوشت.

    =====

    شب بخیر.

  9. #29
    حـــــرفـه ای dogtag's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    مرز غربی تهران بزرگ! ایمیل: goodboy.php@gmail.com اسپم ها: 2,200!!! :دی
    پست ها
    2,277

    پيش فرض

    سلام بر این تاپیک قدیمی!

    (الان که دارم می خونم، می بینم چقدر اون زمان ها دات نت بلد نبودم! )

    البته الان دارید جواب این دوستمون رو می دید ولی با اجازه من هم بپرسم که حرف های قبلی مون تکمیل بشه.

    تمام چیزی که من اون زمان می خواستم، همین "راه حل نهایی" شما بود.

    اما خب مشکل پیاده سازی اش ه!
    شما وقتی 1 درخواست با Ajax به یه فایل ASP.net می دید و اون بهتون یه ID میده، کار تموم میشه.
    حالا اگر جواب درخواست رو بخواید، باید 1 درخواست دیگه با Ajax به اون صفحه بفرستید و ID رو بهش بدید تا مثلاً بگه که نتیجه مطلوب رو بدست آورده یا نه.
    اما نکته اینجاست که این درخواست دوم دیگه به اون فایل قبلی فرستاده نشده و یه نمونه ی جدید از اون فایل اجرا شده!
    سوکتی هم که قرار بوده با سرور ثالث Connect بمونه و تبادلات رو انجام بده، تو ریسمانی ه که با اولین فراخوانی فایل، ساخته شده!
    و دیگه نمیشه بهش دسترسی داشت!

    میشه این روش رو پیاده کنید؟

    ممنون

  10. #30
    در آغاز فعالیت
    تاريخ عضويت
    Apr 2010
    محل سكونت
    تهران-نارمك
    پست ها
    6

    پيش فرض

    سلام
    واقعا از توضيحاتتون ممنونم. كلي مارو شرمنده كرديد.
    تقريبا ٦٠% توضيحاتي كه داديد رو فهميدم و بعضي چيزها رو نفهميدم. آخه من هم مثل دوست قديميمون در دات نت مخصوصا تحت وب خيلي كم تجربه ام. من در اصل برنامه نويس Application تو دلفي هستم ولي الان به شدت نياز به اين صفحه تحت وب دارم.
    من صفحه وب خودم رو ماي وب اسم ميذارم و سروري كه اطلاعات رو به من ميده سرور بانك اسمشو ميذارم.
    موضوع اينجاست كه من ميبايست يك كد براي شناسايي از ماي وب به سرور بانك از طريق سوكت بفرستم مثلا ميگم "قيمتها" و بعد از اون سرور بانك شروع به فرستادن قيمتها ميكنه. اين روند تا زمان بسته شدن صفحه ماي وب من ميبايست ادامه پيدا كنه.
    قسمت دوم اينه كه من در حين اينكه سرور بانك قيمتها رو براي من ميفرسته نياز به اين دارم كه دستورات ديگه اي از ماي وب بفرستم مثلا بگم "قيمتها بر اساس ريال" و اينجاست كه گير ميكنم.
    تو حالت اول يه كانكشن ايجاد ميكنم و دستور اول فرستاده ميشه. بعد هم ماي وب شروع به گرفتن اطلاعات از سرور بانك ميكنه. براي اينكه بتونم اطلاعات رو روي صفحه نمايش بدم از xml و تايمر استفاده كردم كه بد نبود و جواب داد.
    ولي حالا كه ميخوام پيغام دوم رو بفرستم ديگه كانكشن بازي روي ماي وب وجود نداره، برام عجيبه كه پس چطور پيغامها از طرف سرور بانك مياد؟
    حالا يك كانكشن جديد ايجاد ميكنم و پيغام جديد رو ميفرستم ولي سرور بانك اينو بعنوان كانكشن شماره ٢ ميشناسه چون از نظر سرور بانك كانكشن قبلي هنوز بازه. بخاطر همين يه كم مشكل پيدا ميكنم.
    و مشكل آخر اينه كه وقتي من ماي وب رو ميبندم هنوز سرور بانك داره قيمتهاشو ميفرسته. نميدونم چرا كانكشنم بسته نميشه؟
    كدي كه تو بالا نوشتم اين اشكالات رو داره. درضمن لينك دانلود شما هم خطا ميده و نتونستم دانلود كنم.
    ممنون

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •