PDA

View Full Version : آموزش: آموزش برنامه نویسی Sockt



ahmadreza517
دوشنبه 31 مرداد 1390, 18: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, 19:52 عصر
خدا خیرت بده که حرف منو زدی.
آقا من به جز این pdf دوستمون هیچ مقاله دیگه ای به زبان vb ندارم اگه امکانش هست خیلی راهنمایی کنین که راه بیفتیم.

ahmadreza517
دوشنبه 31 مرداد 1390, 21:31 عصر
به نام تنها برنامه نویس هستی

کتاب و پروژه کامل برنامه نویسی Sockt در VB.NET
اینم آدرسش
http://howprg.blogfa.com/cat-19.aspx

فقط نظر یادتون نره


قابل توجه دوست عزیزمون که پروژه می خاست .

M.KH-SH
دوشنبه 31 مرداد 1390, 22:28 عصر
خوب حالا فکر کن که می خوای با چند تا کامپیوتر به صورت همزمان کار کنی مثلا به pc1 بگی که تو باید خاموش بشی به pc2 بگی که تو صفحه رو ببند و یا به pc3 بگی تو فلان برنامه رو اجرا کن
حالا با این حال چی کار باید کرد؟

ahmadreza517
سه شنبه 01 شهریور 1390, 12:17 عصر
به نام تنها برنامه نویس هستی
سلام دوستان

امروز کتاب دیگر در مورد برنامه نویسی سوکت معرفی شده است .
برای دانلود به آدرس زیر بروید .
http://howprg.blogfa.com/post-20.aspx
نظر یادتون نره .

یاحق ...

M.KH-SH
سه شنبه 01 شهریور 1390, 16:20 عصر
خسته نباشین آقایون من این pdf رو خوندم ولی مثلا من میخوام به 5 تا کامپیوتر به صورت همزمان متن های مختلف رو از یک سیستم سرور ارسال کنم
مثلا به هر کدوم یک فرمان بدم برای اون باید چی کار کنم
راستی این کدهای کتاب رو من زیاد متوجه نشدم اگه کتابی با توضیح یک پروژه دارین بهم بدین که دیگه خسته شدم از بس pdf خوندم و پیدا نکردم

armin8651
سه شنبه 01 شهریور 1390, 16:57 عصر
ممنون از بابت این پست، منتظر مباحث بیشتری تو این زمینه هستیم

در ضمن تو ضمیمه هم یه pdf گذاشتم که یه دید کلی از برنامه نویسی سوکت میده که میتونه مفید باشه

M.KH-SH
سه شنبه 01 شهریور 1390, 18:10 عصر
دوست گلم اینجا تالار vb.net هستش نه c# بهتر نیست بجای کتاب c کتاب vb.net بزاری.
هرچند کدها زیاد فرق ندارن و میشه خوند و جواب گرفت ولی من خودم به شخصه تو زبان C خیلی عقب هستم و هنوز به بانک ها نرسیدم برای همین اگه امکانش هست pdf vb.net رو بزارین.
مرسی از کمکتون.

راستی من می خوام یک سرور با یک برنامه در حال اجرا (دقت کنین با یک برنامه در حال اجرا در سرور) دستوراتی رو برای کلاینت های مختلف خودم بفرستم.
کلاینت ها فرض کنین بالای 20 تا هستن و تنها می خوام با یک برنامه در حال اجرا در سرور این 20 کلاینت رو کنترول کنم و به هر یک فرامین مختلف بدم.
در این زمینه بیشتر فعالیت کنین .
ممنونم.

ahmadreza517
سه شنبه 01 شهریور 1390, 20:59 عصر
دوستان عزیز بعضی از کتابها معرفی شده در بالا به زبان C# هست .
برای تبدیل کد C# به VB.net می توانید از آدرس زیر استفاده نمائید.

سایت مورد نظر (http://www.developerfusion.com/tools/convert/csharp-to-vb/)

M.KH-SH
سه شنبه 01 شهریور 1390, 21:35 عصر
دوست عزیز اون فقط سایت هست
من نرم افزار برای تبدیل کل پروژه های دات نت به هم دیگه رو دارم.
هدف یاد گرفتن صحیح هست نه چیز دیگه.

M.KH-SH
سه شنبه 01 شهریور 1390, 21:58 عصر
حالا یک خواهش از دوستانی که در این زمینه تجربه بیشتری دارن من یک پروژه خیلی کوچیک ساختم ولی فقط از کلاینت به سرور پیام میتونم بفرستم نه از سرور به کلاینت.
بعد هم می خوام که بشه با یک سرور همزمان با چند کلاینت روی سیستم های مختلف پیام های گوناگون انتقال داد بدون اینکه مشکلی پیش بیاد.

فقط هرکی کمکم میکنه برای این کار برای خط ها توضیح هم بنویسه که برای چی و چه کاری رو انجام میده.

دوستان خواهشا یاری کنین که دیگه از pdf خوندن خسته شدم.

armin8651
چهارشنبه 02 شهریور 1390, 13:37 عصر
به نام تنها برنامه نویس هستی
سلام دوستان باید بگم این تاپیک هر روز بروز می شه
کتاب و پروژه کامل برنامه نویسی Sockt در VB.NET
اینم آدرسش
http://howprg.blogfa.com/cat-19.aspx

فقط نظر یادتون نره


قابل توجه دوست عزیزمون که پروژه می خاست .

ممنون بابت آموزش و نمونه کد
ولی من نمونه کد رو نمی تونم ببینم، VS 2005 نصب دارم، اگه کدها رو کسی تونست ببینه لطفآ یه کپی ازش اینجا بذاره

ahmadreza517
چهارشنبه 02 شهریور 1390, 18:41 عصر
سلام دوستان خسته نباشید
به آدرس زیر بروید (آموزش برنامه نویسی سوکت همراه با توضیحات)(متن به صورت لاتین است).
http://www.devasp.net/net/articles/display/192.html

M.KH-SH
پنج شنبه 03 شهریور 1390, 00:48 صبح
مرسی از لطفت.
من یکم تو برنامه نویسی با کنسول ها مشکل دارم و زیاد باهاشون حال نمی کنم.
راستی این پروژه ای رو که توضیح داده فقط اطلاعات از کلاینت به سرور ارسال میشه و از سرور به کلاینت نمی شه هیچ اطلاعاتی رو ارسال کرد.

دوست من تو زمینه ارتباط بین 2طرف اگه مطلبی دارین بگین.
راستی من یک مشکل هم دارم برای سمت کلاینت میخوام دستور بنویسم که اگر متن دریافتی xx بود صفحه رو مخفی کن و این کد رو می نویسم ولی اجرا نمیشه
این رو اگه کسی می دونه راهنمایی کنه

این سوالها برای اینه که دارم روی یک پروژه کنترول کافی نت کار میکنم و نمیخوام از بانک اطلاعاتی استفاده کنم فقط میخوام به روش سوکت باشه.
هر جور مطلبی هست رو بزارین تا استفاده کنم
msdn هم خوندم ولی اون هم مطلبی که ارائه داده بود در حد همین مقاله ها هستش یعنی اگه هم بیشتر داشته باشه من پیدا نکردم
با این حال کسی می تونه کمک کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟

armin8651
پنج شنبه 03 شهریور 1390, 10:22 صبح
اگه کد اون برنامه ای که من گفتم رو بتونید مشاهده کنید، انتقال اطلاعات اونجا دو طرفه هستش، در واقع یه برنامه چت ساده بین سرور و کلاینت ها هستش ، اگه تونستسد کد رو مشاهده کنید لطفا یه کپی از کدها رو اینجا بذارید.

M.KH-SH
پنج شنبه 03 شهریور 1390, 10: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


حالا اگه براتون مقدور هست این کد ها رو توضیح بدین
ممنونم.