View Full Version : آموزش: آموزش برنامه نویسی Sockt
  
ahmadreza517
دوشنبه 31 مرداد 1390, 19:57 عصر
:لبخندساده:به نام تنها برنامه نویس هستی:لبخندساده:
دوستان عزیز سلام
با توجه به نیاز دوستان از جمله خود من از شما دوستان که تجربه برنامه نویسی شبکه (Sockt) دارید مقاله ، کتاب و حتی فیلم ، تاپیک ، نمونه کد ، نمونه پروژه در این قسمت برای دوستان قرار دهید .
 
دوستانی که نمونه کد معرفی می کنند لطفا درباره کدشون توضیح بدن .
 
اول خودم شروع می کنم
 
دانلود کتاب برنامه نویسی Sockt در سطح مبتدی .
برای دانلود به آدرس زیر بروید.
http://howprg.blogfa.com/post-13.aspx
 
 
سوال 1
چگونه می توان لیست کامپوتر هایی که در شبکه فعال هستند رو بدست آورد .(نمایش آن در ListBox)
 
سوال 2
چگونه می توان به کامپیوتری که ip اونو دارید پیام بفرستیم و دریافت کنیم (آیا این مسئله در اینترنت متفاوت است)(مثل برنامه چت)
 
سوال 3
آپلود فایل بر روی سرور
 
سوال 4
دیدن send و received در شبکه و نمایش آن در Lable
 
سوال 5
چگونه می توان به کامپیوتر مورد نظر در شبکه فرمان داد (خاموش کردن یا فلان پنجره رو ببند) .
M.KH-SH
دوشنبه 31 مرداد 1390, 20:52 عصر
خدا خیرت بده که حرف منو زدی.
آقا من به جز این pdf دوستمون هیچ مقاله دیگه ای به زبان vb ندارم اگه امکانش هست خیلی راهنمایی کنین که راه بیفتیم.
ahmadreza517
دوشنبه 31 مرداد 1390, 22:31 عصر
به نام تنها برنامه نویس هستی
 
کتاب و پروژه کامل برنامه نویسی Sockt در VB.NET 
اینم آدرسش
http://howprg.blogfa.com/cat-19.aspx
 
فقط نظر یادتون نره 
 
 
قابل توجه دوست عزیزمون که پروژه می خاست .
M.KH-SH
دوشنبه 31 مرداد 1390, 23:28 عصر
خوب حالا فکر کن که می خوای با چند تا کامپیوتر به صورت همزمان کار کنی مثلا به pc1 بگی که تو باید خاموش بشی به pc2 بگی که تو صفحه رو ببند و یا به pc3 بگی تو فلان برنامه رو اجرا کن
حالا با این حال چی کار باید کرد؟
ahmadreza517
سه شنبه 01 شهریور 1390, 13:17 عصر
به نام تنها برنامه نویس هستی
سلام دوستان 
 
امروز  کتاب دیگر در مورد برنامه نویسی سوکت معرفی شده است .
برای دانلود به آدرس زیر بروید .
http://howprg.blogfa.com/post-20.aspx
نظر یادتون نره .
 
یاحق ...
M.KH-SH
سه شنبه 01 شهریور 1390, 17:20 عصر
خسته نباشین آقایون من این pdf رو خوندم ولی مثلا من میخوام به 5 تا کامپیوتر به صورت همزمان متن های مختلف رو از یک سیستم سرور ارسال کنم
مثلا به هر کدوم یک فرمان بدم برای اون باید چی کار کنم
راستی این کدهای کتاب رو من زیاد متوجه نشدم اگه کتابی با توضیح یک پروژه دارین بهم بدین که دیگه خسته شدم از بس pdf خوندم و پیدا نکردم
armin8651
سه شنبه 01 شهریور 1390, 17:57 عصر
ممنون از بابت این پست، منتظر مباحث بیشتری تو این زمینه هستیم
در ضمن تو ضمیمه هم یه pdf گذاشتم که یه دید کلی از برنامه نویسی سوکت میده که میتونه مفید باشه
M.KH-SH
سه شنبه 01 شهریور 1390, 19:10 عصر
دوست گلم اینجا تالار vb.net هستش نه c# بهتر نیست بجای کتاب c کتاب vb.net بزاری.
هرچند کدها زیاد فرق ندارن و میشه خوند و جواب گرفت ولی من خودم به شخصه تو زبان C خیلی عقب هستم و هنوز به بانک ها نرسیدم برای همین اگه امکانش هست pdf vb.net رو بزارین.
مرسی از کمکتون.
راستی من می خوام یک سرور با یک برنامه در حال اجرا (دقت کنین با یک برنامه در حال اجرا در سرور) دستوراتی رو برای کلاینت های مختلف خودم بفرستم.
کلاینت ها فرض کنین بالای 20 تا هستن و تنها می خوام با یک برنامه در حال اجرا در سرور این 20 کلاینت رو کنترول کنم و به هر یک فرامین مختلف بدم.
در این زمینه بیشتر فعالیت کنین .
ممنونم.
ahmadreza517
سه شنبه 01 شهریور 1390, 21:59 عصر
دوستان عزیز بعضی از کتابها معرفی شده در بالا به زبان C# هست .
برای تبدیل کد C# به VB.net می توانید از آدرس زیر استفاده نمائید.
سایت مورد نظر (http://www.developerfusion.com/tools/convert/csharp-to-vb/)
M.KH-SH
سه شنبه 01 شهریور 1390, 22:35 عصر
دوست عزیز اون فقط سایت هست 
من نرم افزار برای تبدیل کل پروژه های دات نت به هم دیگه رو دارم.
هدف یاد گرفتن صحیح هست نه چیز دیگه.
M.KH-SH
سه شنبه 01 شهریور 1390, 22:58 عصر
حالا یک خواهش از دوستانی که در این زمینه تجربه بیشتری دارن من یک پروژه خیلی کوچیک ساختم ولی فقط از کلاینت به سرور پیام میتونم بفرستم نه از سرور به کلاینت.
بعد هم می خوام که بشه با یک سرور همزمان با چند کلاینت روی سیستم های مختلف پیام های گوناگون انتقال داد بدون اینکه مشکلی پیش بیاد.
فقط هرکی کمکم میکنه برای این کار برای خط ها توضیح هم بنویسه که برای چی و چه کاری رو انجام میده.
دوستان خواهشا یاری کنین که دیگه از pdf خوندن خسته شدم.
armin8651
چهارشنبه 02 شهریور 1390, 14:37 عصر
به نام تنها برنامه نویس هستی
سلام دوستان باید بگم این تاپیک هر روز بروز می شه
کتاب  و پروژه کامل برنامه نویسی Sockt در VB.NET 
اینم آدرسش
http://howprg.blogfa.com/cat-19.aspx
 
فقط نظر یادتون نره 
 
 
قابل توجه دوست عزیزمون که پروژه می خاست .
ممنون بابت آموزش و نمونه کد
ولی من نمونه کد رو نمی تونم ببینم، VS 2005 نصب دارم، اگه کدها رو کسی تونست ببینه لطفآ یه کپی ازش اینجا بذاره
ahmadreza517
چهارشنبه 02 شهریور 1390, 19:41 عصر
سلام دوستان خسته نباشید
به آدرس زیر بروید (آموزش برنامه نویسی سوکت همراه با توضیحات)(متن به صورت لاتین است).
http://www.devasp.net/net/articles/display/192.html
M.KH-SH
پنج شنبه 03 شهریور 1390, 01:48 صبح
مرسی از لطفت.
من یکم تو برنامه نویسی با کنسول ها مشکل دارم و زیاد باهاشون حال نمی کنم.
راستی این پروژه ای رو که توضیح داده فقط اطلاعات از کلاینت به سرور ارسال میشه و از سرور به کلاینت نمی شه هیچ اطلاعاتی رو ارسال کرد.
دوست من تو زمینه ارتباط بین 2طرف اگه مطلبی دارین بگین.
راستی من یک مشکل هم دارم برای سمت کلاینت میخوام دستور بنویسم که اگر متن دریافتی xx بود صفحه رو مخفی کن و این کد رو می نویسم ولی اجرا نمیشه
این رو اگه کسی می دونه راهنمایی کنه
این سوالها برای اینه که دارم روی یک پروژه کنترول کافی نت کار میکنم و نمیخوام از بانک اطلاعاتی استفاده کنم فقط میخوام به روش سوکت باشه.
 هر جور مطلبی هست رو بزارین تا استفاده کنم
msdn هم خوندم ولی اون هم مطلبی که ارائه داده بود در حد همین مقاله ها هستش یعنی اگه هم بیشتر داشته باشه من پیدا نکردم
با این حال کسی می تونه کمک کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟
armin8651
پنج شنبه 03 شهریور 1390, 11:22 صبح
اگه کد اون برنامه ای که من گفتم رو بتونید مشاهده کنید، انتقال اطلاعات اونجا دو طرفه هستش، در واقع یه برنامه چت ساده بین سرور و کلاینت ها هستش ، اگه تونستسد کد رو مشاهده کنید لطفا یه کپی از کدها رو اینجا بذارید.
M.KH-SH
پنج شنبه 03 شهریور 1390, 11:53 صبح
این برنامه شامل 3 تا کلاس هستش.
Option Strict On
Public Interface IChat
    Inherits System.IDisposable
    Event Recived As MessageEventHandler
    Event EnabledChange As System.EventHandler
    Property EndPoint() As System.Net.IPEndPoint
    Property Enabled() As Boolean
    Sub Send(ByVal msg As String)
End Interface
Public Class MessageEventArgs
    Inherits System.EventArgs
    Public ReadOnly Message As String
    Public Sub New(ByVal message As String)
        Me.Message = message
    End Sub
End Class
Public Delegate Sub MessageEventHandler(ByVal sender As Object, ByVal msg As MessageEventArgs)
Option Strict On
Public Class TcpClientChat
    Implements IChat
    Private Const BUFFERSIZE As Integer = 8 * 1024 '8KB
    Private m_AsyncCallback_Send As New System.AsyncCallback(AddressOf Me.AsyncCallback_Send)
    Private m_ThreadStart_Read As New System.Threading.ParameterizedThreadStart(AddressO f Me.ThreadStart_Read)
    Private m_AsyncLock As New Object
    Private m_Encoding As System.Text.Encoding = System.Text.Encoding.UTF8
    Private m_Socket As System.Net.Sockets.Socket
    Private m_Buffer(BUFFERSIZE - 1) As Byte
    Private m_EndPoint As System.Net.IPEndPoint
    Public Event EnabledChange As EventHandler Implements IChat.EnabledChange
    Public Event Recived As MessageEventHandler Implements IChat.Recived
    Public Sub New()
    End Sub
#Region " Property "
    Public Property EndPoint() As System.Net.IPEndPoint Implements IChat.EndPoint
        Get
            Return Me.m_EndPoint
        End Get
        Set(ByVal value As System.Net.IPEndPoint)
            Me.m_EndPoint = value
        End Set
    End Property
    Public Property Enabled() As Boolean Implements IChat.Enabled
        Get
            SyncLock Me.m_AsyncLock
                Return (Me.m_Socket IsNot Nothing) AndAlso (Me.m_Socket.Connected)
            End SyncLock
        End Get
        Set(ByVal value As Boolean)
            SyncLock Me.m_AsyncLock
                If (Me.Enabled = value) Then Return
                If value Then
                    Me.Start()
                Else
                    Me.Stop()
                End If
                RaiseEvent EnabledChange(Me, System.EventArgs.Empty)
            End SyncLock
        End Set
    End Property
#End Region
#Region " Method "
    Public Sub Send(ByVal msg As String) Implements IChat.Send
        If (String.IsNullOrEmpty(msg)) Then Return
        Dim buffer() As Byte = Me.m_Encoding.GetBytes(msg)
        Me.m_Socket.BeginSend( _
            buffer, _
            0, _
            buffer.Length, _
            System.Net.Sockets.SocketFlags.None, _
            Me.m_AsyncCallback_Send, _
            Nothing)
    End Sub
    Private Sub Start()
        Me.m_Socket = _
            New System.Net.Sockets.Socket( _
            Me.m_EndPoint.AddressFamily, _
            System.Net.Sockets.SocketType.Stream, _
            System.Net.Sockets.ProtocolType.Tcp)
        Me.m_Socket.Connect(Me.m_EndPoint)
        Dim thread As New System.Threading.Thread(Me.m_ThreadStart_Read)
        thread.IsBackground = True
        thread.Priority = System.Threading.ThreadPriority.BelowNormal
        thread.Start(Nothing)
    End Sub
    Private Sub [Stop]()
        Me.m_Socket.Close()
        Me.m_Socket = Nothing
    End Sub
    Public Sub Dispose() Implements IDisposable.Dispose
        Me.Enabled = False
        System.GC.SuppressFinalize(Me)
    End Sub
#End Region
#Region " Asynchronous "
    Private Sub AsyncCallback_Send(ByVal ar As System.IAsyncResult)
        Me.m_Socket.EndSend(ar)
    End Sub
    Private Sub ThreadStart_Read(ByVal state As Object)
        Dim iRead As Integer
        Do
            Try
                iRead = Me.m_Socket.Receive(Me.m_Buffer, BUFFERSIZE, System.Net.Sockets.SocketFlags.None)
            Catch
                iRead = 0
            End Try
            If (Not Me.Enabled) Then Return
            If (iRead <= 0) Then
                Me.Enabled = False
                Return
            End If
            RaiseEvent Recived(Me, New MessageEventArgs(Me.m_Encoding.GetString(Me.m_Buff er, 0, iRead)))
        Loop
    End Sub
#End Region
End Class
Option Strict On
Public Class TcpServerChat
    Implements IChat
    Private Const BUFFERSIZE As Integer = 8 * 1024 '8KB
    Private m_AsyncCallback_Send As New System.AsyncCallback(AddressOf Me.AsyncCallback_Send)
    Private m_ThreadStart_Read As New System.Threading.ParameterizedThreadStart(AddressO f Me.ThreadStart_Read)
    Private m_ThreadStart_Accept As New System.Threading.ParameterizedThreadStart(AddressO f Me.ThreadStart_Accept)
    Private m_AsyncLock As New Object
    Private m_Encoding As System.Text.Encoding = System.Text.Encoding.UTF8
    Private m_Socket As System.Net.Sockets.Socket
    Private m_EndPoint As System.Net.IPEndPoint
    Private m_Clients As New System.Collections.Generic.List(Of Client)
    Public Event EnabledChange As EventHandler Implements IChat.EnabledChange
    Public Event Recived As MessageEventHandler Implements IChat.Recived
    Public Sub New()
    End Sub
#Region " Property "
    Public Property EndPoint() As System.Net.IPEndPoint Implements IChat.EndPoint
        Get
            Return Me.m_EndPoint
        End Get
        Set(ByVal value As System.Net.IPEndPoint)
            Me.m_EndPoint = value
        End Set
    End Property
    Public Property Enabled() As Boolean Implements IChat.Enabled
        Get
            SyncLock Me.m_AsyncLock
                Return (Me.m_Socket IsNot Nothing)
            End SyncLock
        End Get
        Set(ByVal value As Boolean)
            SyncLock Me.m_AsyncLock
                If (Me.Enabled = value) Then Return
                If value Then
                    Me.Start()
                Else
                    Me.Stop()
                End If
                RaiseEvent EnabledChange(Me, System.EventArgs.Empty)
            End SyncLock
        End Set
    End Property
#End Region
#Region " Method "
    Public Sub Send(ByVal msg As String) Implements IChat.Send
        If (String.IsNullOrEmpty(msg)) Then Return
        Dim buffer() As Byte = Me.m_Encoding.GetBytes(msg)
        SyncLock Me.m_Clients
            For Each client In Me.m_Clients
                client.Socket.BeginSend( _
                    buffer, _
                    0, _
                    buffer.Length, _
                    System.Net.Sockets.SocketFlags.None, _
                    Me.m_AsyncCallback_Send, _
                    client)
            Next
        End SyncLock
    End Sub
    Private Sub Start()
        Me.m_Socket = _
            New System.Net.Sockets.Socket( _
            Me.m_EndPoint.AddressFamily, _
            System.Net.Sockets.SocketType.Stream, _
            System.Net.Sockets.ProtocolType.Tcp)
        Me.m_Socket.ExclusiveAddressUse = True
        Me.m_Socket.Bind(Me.m_EndPoint)
        Me.m_Socket.Listen(Integer.MaxValue)
        Dim thread As New System.Threading.Thread(Me.m_ThreadStart_Accept)
        thread.IsBackground = True
        thread.Priority = System.Threading.ThreadPriority.BelowNormal
        thread.Start(Nothing)
    End Sub
    Private Sub [Stop]()
        SyncLock Me.m_Clients
            For Each client In Me.m_Clients
                client.Socket.Close()
            Next
            Me.m_Clients.Clear()
        End SyncLock
        Me.m_Socket.Close()
        Me.m_Socket = Nothing
    End Sub
    Public Sub Dispose() Implements IDisposable.Dispose
        Me.Enabled = False
        System.GC.SuppressFinalize(Me)
    End Sub
#End Region
#Region " Asynchronous "
    Private Sub AsyncCallback_Send(ByVal ar As System.IAsyncResult)
        DirectCast(ar.AsyncState, Client).Socket.EndSend(ar)
    End Sub
    Private Sub ThreadStart_Accept(ByVal state As Object)
        Dim socket As System.Net.Sockets.Socket
        Dim client As Client
        Do
            Try
                socket = Me.m_Socket.Accept()
            Catch
                socket = Nothing
            End Try
            If (Not Me.Enabled) Then Return
            If (socket Is Nothing) Then
                Me.Enabled = False
                Return
            End If
            client = New Client(socket)
            SyncLock Me.m_Clients
                Me.m_Clients.Add(client)
            End SyncLock
            Dim thread As New System.Threading.Thread(Me.m_ThreadStart_Read)
            thread.IsBackground = True
            thread.Priority = System.Threading.ThreadPriority.BelowNormal
            thread.Start(client)
        Loop
    End Sub
    Private Sub ThreadStart_Read(ByVal state As Object)
        Dim client As Client = DirectCast(state, Client)
        Dim iRead As Integer
        Do
            Try
                iRead = client.Socket.Receive(client.Buffer, BUFFERSIZE, System.Net.Sockets.SocketFlags.None)
            Catch
                iRead = 0
            End Try
            If (Not Me.Enabled) Then Return
            If (iRead <= 0) Then
                client.Socket.Close()
                SyncLock Me.m_Clients
                    Me.m_Clients.Remove(client)
                End SyncLock
                Return
            End If
            RaiseEvent Recived(Me, New MessageEventArgs(Me.m_Encoding.GetString(client.Bu ffer, 0, iRead)))
        Loop
    End Sub
#End Region
    Private NotInheritable Class Client
        Public ReadOnly Socket As System.Net.Sockets.Socket
        Public ReadOnly Buffer(BUFFERSIZE - 1) As Byte
        Public Sub New(ByVal socket As System.Net.Sockets.Socket)
            Me.Socket = socket
        End Sub
    End Class
End Class
حالا اگه براتون مقدور هست این کد ها رو توضیح بدین
ممنونم.
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.