PDA

View Full Version : سوال: ارتباط چند برنامه باهم



tizhoosh
سه شنبه 28 خرداد 1387, 14:59 عصر
يك راست سر اصل مطلب.....

چگونه دو برنامه ي مجزا مي توانند با هم ارتباط برقرار كنند و يا اطلاعاتي براي هم بفرستند

؟؟ :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: ؟؟
مثلاً برنامه اول عددي را به برنامه ي دوم بفرستد و پس از انجام محاسبه حاصل را به همان برنامه ي اول برگرداند يا خودش از آن استفاده كند
البته هر دو برنامه را خودمان مي نويسيم
و صد البته منظور من از طريق فايل واسطه نيست
چون سرعت و امنيت بسيار كمي دارد



با سپاس قبلي


{اين تاپيك تقريباً به نتيجه رسيد كه حاصل كار را ميتوانيد در اينجا (http://barnamenevis.org/forum/showpost.php?p=539214&postcount=14) مشاهده كنيد البته اگر راه حل ديگري داريد دريغ نفرماييد}

ASKaffash
سه شنبه 28 خرداد 1387, 15:44 عصر
باسلام
بله از طریق Socket میتوانند در یک یا چند کامپیوتر باهم ارتباط داده ای برقرا کنند.

tizhoosh
سه شنبه 28 خرداد 1387, 15:50 عصر
بله از طریق Socket میتوانند در یک یا چند کامپیوتر باهم ارتباط داده ای برقرا کنند.

اگر مي شود يك مثال كوچك براي يك كامپيوتر بگذار

با سپاس قبلي

vahidvb
سه شنبه 28 خرداد 1387, 17:20 عصر
باسلام
بله از طریق Socket میتوانند در یک یا چند کامپیوتر باهم ارتباط داده ای برقرا کنند.

ایشون یک یا چند برنامه رو میخواد نه کامپیوتر

api هایی هست که به فرض اندازه و لفت و رایت و تایتل دیگر پنجره ها رو بگیره
این چند تا دم دست بود باز هم هست hwnd پنجره رو میگیری و روشون کار میکنی


Public Declare Function GetWindowTextA Lib "user32" (ByVal hwnd As Long, ByVal lpString As String, ByVal aint As Long) As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long

vahidvb
سه شنبه 28 خرداد 1387, 17:27 عصر
باقی api ها مثل getwindowlong یا getwindowrect و ... رو تو api text viewer ببین تو این قسمت هست
start>programs>microsoft visual studio 6>Microsoft Visual Studio 6.0 Tools
قایل win32api.txt رو باز کن

tizhoosh
سه شنبه 28 خرداد 1387, 18:35 عصر
باقی api ها مثل getwindowlong یا getwindowrect و ... رو تو api text viewer ببین تو این قسمت هست
start>programs>microsoft visual studio 6>Microsoft Visual Studio 6.0 Tools
قایل win32api.txt رو باز کن

از توجهت ممنون با api تا حدودي آشنايي دارم
ولي منظور من اين نبود كه يكي از برنامه ها در ديگري تغيير بدهد يا از راه تغيير مثلا در محتويات يك تكست باكس با هم ارتباط برقرار كنند چون اين راه هم مناسب نيست و امنيت زيادي ندارد

مهران رسا
چهارشنبه 29 خرداد 1387, 09:35 صبح
چرا فایل واسطه ، روش خوبی نیست ؟!!

شما می تونید اطلاعات رو Code کنید تا امنیت هم برقرار بشه ...

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

tizhoosh
چهارشنبه 29 خرداد 1387, 13:10 عصر
چرا فایل واسطه ، روش خوبی نیست ؟!!

شما می تونید اطلاعات رو Code کنید تا امنیت هم برقرار بشه ...

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

1-سرعتش كم است مخصوصاً اگر داده به جاي عدد از نوع ديگري باشد
2-يكي از ملاك هاي من براي امنيت اين بود نتوانند با تغيير فايل برنامه را به اشتباه بيندازند
يكي ديگر از اين ملاك ها اين بود كه با حذف فايل نتوانند ارتباط را معيوب كنند



اگر كسي مي تواند درهمان مورد socket در يك كامپيوترمي تواند كمك كند بسم الله


با سپاس قبلي

Mbt925
چهارشنبه 29 خرداد 1387, 13:15 عصر
ارسال مستقیم اطلاعات از طریق تابع API اه SendMessage و خانوادش انجام میشه.

مثالی براتون قرار دادم.
فایل اجرایی Reciever و Sender رو اجرا کنید.
از طریق دکمه ای که در فایل Sender موجوده ، متن رو برای فایل Reciever ارسال کنید.

tizhoosh
چهارشنبه 29 خرداد 1387, 13:52 عصر
ضمن تشكر از شما:تشویق:
جواب نسبتاً خوبي بود:لبخندساده:
اما آيا راهي جز ست كردن تكست باكس نيست؟؟؟؟:متفکر:

Mbt925
چهارشنبه 29 خرداد 1387, 13:59 عصر
وقتی متنی برای یه کنترل ارسال میشه ، اون کنترل باید قابلیت دریافت متن رو داشته باشه.

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

majjjj
چهارشنبه 29 خرداد 1387, 14:19 عصر
يك راست سر اصل مطلب.....

چگونه دو برنامه ي مجزا مي توانند با هم ارتباط برقرار كنند و يا اطلاعاتي براي هم بفرستند

؟؟ :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: ؟؟
مثلاً برنامه اول عددي را به برنامه ي دوم بفرستد و پس از انجام محاسبه حاصل را به همان برنامه ي اول برگرداند يا خودش از آن استفاده كند
البته هر دو برنامه را خودمان مي نويسيم
و صد البته منظور من از طريق فايل واسطه نيست
چون سرعت و امنيت بسيار كمي دارد


با سپاس قبلي
چون امنیت براتون مهمه یک چیز رو بگم اون هم بعضی وقتها میشه یک کارهایی کرد که موقع ارسال یک پیغام توسط یک برنامه سوم متن پیغام دریافت بشه ویا حتی تغییر کنه

ASKaffash
چهارشنبه 29 خرداد 1387, 14:56 عصر
سلام
این برنامه یک نمونه واقعی وتکنیکی استفاده از WinSock است یک روی یک PC بین دوبرنامه متن ارسال میکند درضمن در برقراری ارتباط با هر شکلی باهوش عمل میکند. پس میشود!
این کد برنامه ارسال کننده :


Private Sub Form_Load()
Me.Text1.Text = "172.23.23.17"
End Sub
Private Sub TCPClient_DataArrival(ByVal bytesTotal As Long)
Dim StrData As String
Me.TCPClient.GetData StrData
Me.Caption = StrData
End Sub
Private Sub Command1_Click()
If Me.TCPClient.State = 7 Then
Me.TCPClient.SendData Me.Text2.Text
End If
End Sub
Private Sub Text1_Change()
Call Timer1_Timer
End Sub
Private Sub Timer1_Timer()
If Me.TCPClient.State <> 7 Then
Me.TCPClient.Close
Call NewConnect
End If
Me.Caption = IIf(Me.TCPClient.State = 7, "Ok", "No") + " Connection"
End Sub
Private Sub NewConnect()
Me.TCPClient.RemoteHost = Trim(Me.Text1.Text)
Me.TCPClient.RemotePort = 1001
Me.TCPClient.Connect
End Sub

این کد برنامه دریافت کننده :


Private Sub Timer1_Timer()
If Me.TCPServer.State <> 7 Then
Me.TCPServer.Close
Me.TCPServer.LocalPort = 1001
Me.TCPServer.Listen
End If
Me.Caption = IIf(Me.TCPServer.State = 7, "Ok", "No") + " Connection"
End Sub
Private Sub TCPServer_ConnectionRequest(ByVal requestID As Long)
If Me.TCPServer.State <> sckClosed Then Me.TCPServer.Close
Me.TCPServer.Accept requestID
End Sub
Private Sub TCPServer_DataArrival(ByVal bytesTotal As Long)
Dim StrData As String
Me.TCPServer.GetData StrData
Me.Label1.Caption = StrData
End Sub

tizhoosh
چهارشنبه 29 خرداد 1387, 19:14 عصر
در پاسخ به ASKaffash :
1- تشكر... :لبخند:
2-اصل برنامه ها درست وعالي بودند :تشویق:
3-يكي از برنامه ها يك ايراد خيلي كوچيك داشت(انگار آن را براي ip خودت نوشته بودي)
4 ايراد را رفع كردم و برنامه را به صورت زير در آوردم
19305

اين هم سورس.....
19304

majjjj
شنبه 01 تیر 1387, 13:35 عصر
سلام
این برنامه یک نمونه واقعی وتکنیکی استفاده از WinSock است یک روی یک PC بین دوبرنامه متن ارسال میکند درضمن در برقراری ارتباط با هر شکلی باهوش عمل میکند. پس میشود!
این کد برنامه ارسال کننده :


Private Sub Form_Load()
Me.Text1.Text = "172.23.23.17"
End Sub
Private Sub TCPClient_DataArrival(ByVal bytesTotal As Long)
Dim StrData As String
Me.TCPClient.GetData StrData
Me.Caption = StrData
End Sub
Private Sub Command1_Click()
If Me.TCPClient.State = 7 Then
Me.TCPClient.SendData Me.Text2.Text
End If
End Sub
Private Sub Text1_Change()
Call Timer1_Timer
End Sub
Private Sub Timer1_Timer()
If Me.TCPClient.State <> 7 Then
Me.TCPClient.Close
Call NewConnect
End If
Me.Caption = IIf(Me.TCPClient.State = 7, "Ok", "No") + " Connection"
End Sub
Private Sub NewConnect()
Me.TCPClient.RemoteHost = Trim(Me.Text1.Text)
Me.TCPClient.RemotePort = 1001
Me.TCPClient.Connect
End Sub

این کد برنامه دریافت کننده :


Private Sub Timer1_Timer()
If Me.TCPServer.State <> 7 Then
Me.TCPServer.Close
Me.TCPServer.LocalPort = 1001
Me.TCPServer.Listen
End If
Me.Caption = IIf(Me.TCPServer.State = 7, "Ok", "No") + " Connection"
End Sub
Private Sub TCPServer_ConnectionRequest(ByVal requestID As Long)
If Me.TCPServer.State <> sckClosed Then Me.TCPServer.Close
Me.TCPServer.Accept requestID
End Sub
Private Sub TCPServer_DataArrival(ByVal bytesTotal As Long)
Dim StrData As String
Me.TCPServer.GetData StrData
Me.Label1.Caption = StrData
End Sub

اگه منظورتون جواب به مبحث من بود باید بگم نظرتون در موردپکت اسنیفرهاروهم بگید

ASKaffash
شنبه 01 تیر 1387, 14:00 عصر
اگه منظورتون جواب به مبحث من بود باید بگم نظرتون در موردپکت اسنیفرهاروهم بگید

نه دوست من منظور شما نیستید
دوستان گفته بودند روی یک PC با Socket نمیشود.