PDA

View Full Version : کمک در مورد winsock



ho3ein.3ven
دوشنبه 18 اردیبهشت 1391, 20:17 عصر
سلام بر همگی . دوستان کسی آموزش یا سورسی داره در مورد ارتباط دو کامپیوتر با هم از طریق وینساک . سورس های هم که تو سایت گذاشته شده چک کردم کار نمی کنه . با تشکر

محسن واژدی
دوشنبه 18 اردیبهشت 1391, 20:49 عصر
سلام علیکم
لینک زیر حاوی اطلاعات مفیدی در زمینه اموزش winsock به همراه یک نمونه است:
http://tcp.oflameron.com/client_server_on_vb.zip

آموزش دوم (فارسی):
http://barnamenevis.org/attachment.php?attachmentid=8769&d=1180524704


آموزش TAPI و Winsock
http://barnamenevis.org/attachment.php?attachmentid=8752&d=1180519431



پست زیر هم:
http://barnamenevis.org/showthread.php?233050-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Winsock&p=1037249&viewfull=1#post1037249

و چند نمونه استفاده:
http://barnamenevis.org/attachment.php?attachmentid=32914&d=1247099860
http://barnamenevis.org/attachment.php?attachmentid=32916&d=1247099946
http://barnamenevis.org/attachment.php?attachmentid=32917&d=1247100097
http://barnamenevis.org/attachment.php?attachmentid=32918&d=1247100178
موفق باشید

ho3ein.3ven
دوشنبه 18 اردیبهشت 1391, 23:28 عصر
سلام .واقعا ممنون به خاطر این ها.
من با یکی از فایل های ضمیمه client_server_on_vb.doc جلو رفتم .رو سیستم خودم سرور و کلاینت رو که امتحان می کنم به همدیگه وصل میشن ولی وقتی کلاینت رو روی یه کامپیوتر دیگه گذاشتم به سرور وصل نمیشه.
مشکل کجاست ؟

Mr'Jamshidy
سه شنبه 19 اردیبهشت 1391, 00:08 صبح
عمدتا 2 تا حالت ممکنه پیش بیاد

1. درست نبودن IP
2. وجود فایر وال

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 09:56 صبح
خب اگه آی پی درست نباشه رو سیستم خودمم نباید وصل بشه . با دستور ipconfig آی پی مو گرفتم . حتی رو 2-3 تا سیستم هم امتحانش کردم.

محسن واژدی
سه شنبه 19 اردیبهشت 1391, 10:41 صبح
سلام
client و server مشکلی نداشتند یعنی بر روی دو سیستم مجزا ارتباط برقرار میکردند
همانطور که آقای جمشیدی هم گفتند میتواند از آدرس یا فایروال ویندوز باشد، در ویندوز سون که اینطوری است (فایروال سوال میکند)

البته زمانی که winsock درخواست اتصال را به IP مقصد میفرسته باید چند لحظه تا برقراری اتصال صبر کنیم تا زمانی که مقدار خاصیت State برابر 7 شود (sckConnected=7)
میتوانید از کد زیر مابین دستور Connect و دستور SendData استفاده کنید (البته اگر SendData بلافاصله پس از Connect فراخوانی میشود):
Do
DoEvents
Loop Until Winsock1.State = sckConnected
موفق باشید

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 11:34 صبح
سلام
client و server مشکلی نداشتند یعنی بر روی دو سیستم مجزا ارتباط برقرار میکردند
همانطور که آقای جمشیدی هم گفتند میتواند از آدرس یا فایروال ویندوز باشد، در ویندوز سون که اینطوری است (فایروال سوال میکند)

البته زمانی که winsock درخواست اتصال را به IP مقصد میفرسته باید چند لحظه تا برقراری اتصال صبر کنیم تا زمانی که مقدار خاصیت State برابر 7 شود (sckConnected=7)
میتوانید از کد زیر مابین دستور Connect و دستور SendData استفاده کنید (البته اگر SendData بلافاصله پس از Connect فراخوانی میشود):
Do
DoEvents
Loop Until Winsock1.State = sckConnected
موفق باشید

سلام . واقعا بخاطر این همه لطفتون ممنونم. ولی بازم مشکلم حل نشد . من کلاینت رو روی vps می زارم. ببینید وقتی که روی سیتم خودم با کلاینت وصل میشم stat میشه 7 ولی وقتی رو vps کانکت میشم stat میشه 6 .

محسن واژدی
سه شنبه 19 اردیبهشت 1391, 12:07 عصر
سلام
این به این معنی است که برنامه در حال اتصال است و باید تا اتصال کامل صبر کنیم
از چه پورتی برای اتصال به سرور استفاده میکنید؟
همینطور اگر بر روی سرورتون فایروال نصب کردین فراموش نکنین که پورت های سفارشی مورد استفاده تون رو به فایروال هم اضافه کنید

موفق باشید

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 12:18 عصر
سلام . از پورت 125 استفاده می کنم.
الان کلاینت رو که رو vps گذاشتم کانکت رو زدم بعد از چند دقیقه stat شد 9 .

محسن واژدی
سه شنبه 19 اردیبهشت 1391, 12:27 عصر
سلام،
این خطا یا ممکن است پورت در دسترس نباشد، یا سرور اجازه نمیدهد و ... .
اطلاعات زیادی از پورتهای سرور مجازی در خاطر ندارم ولی فکر کنم از 1025 بودند تا 65536،

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 13:23 عصر
سلام.الان با پورت 1000 هم امتحان کردم باز نشد .
این سورسشه . ببینید جاییش مشکل نداره ؟
سرور

Private Sub Form_Load()

'''oflameron - name Winsock
'Form1.Visible = True ''Form1 is visible
'Do
If oflameron.State <> sckConnected And oflameron.State <> sckListening Then '' Is the connection available or do we listen to the port?
oflameron.Close '' All the connections are switched off
oflameron.Listen ''Listen port
End If
' DoEvents
'Loop
End Sub
Private Sub oflameron_ConnectionRequest(ByVal requestID As Long) ''Request for connection
oflameron.Close ''Listen close
oflameron.Accept requestID '' Let's tap a Client with the number of his request.
End Sub

Private Sub oflameron_DataArrival(ByVal bytesTotal As Long)
Dim Data As String ''Variable Data
oflameron.GetData Data '' It will contain the received data
Text1.Text = Data
If Data = "END" Then End ''If the text command END is received, you shall finish the work of server
If Data = "NOTEPAD" Then Shell ("notepad.exe") ''To start up the application Notepad on the side of the server
End Sub

کلاینت
Private Sub Form_Load()
ip.Text = wsock.LocalIP
End Sub
Private Sub Command1_Click() ''|Connect| button - START YOUR WORK BY PRESSING IT!!!!
wsock.Close ''Connections close
wsock.RemoteHost = "192.168.1.2" ''IP-address of Server
wsock.RemotePort = 1000 ''The number of the port is set in Port.Text (TextBox) - 125
wsock.Connect ''Set connection
Do
DoEvents
Loop Until wsock.State = sckConnected
End Sub
Private Sub Command2_Click() ''|Disconnect| button
wsock.Close ''Close connection
End Sub
Private Sub Command3_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection. If the connection is available, to send a message
wsock.SendData " Web site http://www.oflameron.com"
End Sub
Private Sub Command4_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection
wsock.SendData "NOTEPAD" ''Load Notepad on Server
End Sub
Private Sub Command5_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection
wsock.SendData "END" ''Sent TEXT command on Server
End Sub
Private Sub Timer1_Timer()
Label1.Caption = wsock.State
End Sub

محسن واژدی
سه شنبه 19 اردیبهشت 1391, 14:02 عصر
سلام علیکم
در کلاینت:

Private Sub Form_Load()
ip.Text = wsock.LocalIP
End Sub
Private Sub Command1_Click() ''|Connect| button - START YOUR WORK BY PRESSING IT!!!!
wsock.Close ''Connections close
wsock.RemoteHost = "192.168.1.2" ''IP-address of Server
wsock.RemotePort = 1000 ''The number of the port is set in Port.Text (TextBox) - 125
wsock.Connect ''Set connection
Do
DoEvents
Loop Until wsock.State = sckConnected
End Sub
Private Sub Command2_Click() ''|Disconnect| button
wsock.Close ''Close connection
End Sub
Private Sub Command3_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection. If the connection is available, to send a message
wsock.SendData " Web site http://www.oflameron.com"
End Sub
Private Sub Command4_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection
wsock.SendData "NOTEPAD" ''Load Notepad on Server
End Sub
Private Sub Command5_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection
wsock.SendData "END" ''Sent TEXT command on Server
End Sub
Private Sub Timer1_Timer()
Label1.Caption = wsock.State
End Sub

مقدار RemoteHost هم 192.168.1.2 قرار دادین؟! (چون این آدرس شبکه خانگی است نه server-remote-host)

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 19:29 عصر
سلام علیکم
در کلاینت:

Private Sub Form_Load()
ip.Text = wsock.LocalIP
End Sub
Private Sub Command1_Click() ''|Connect| button - START YOUR WORK BY PRESSING IT!!!!
wsock.Close ''Connections close
wsock.RemoteHost = "192.168.1.2" ''IP-address of Server
wsock.RemotePort = 1000 ''The number of the port is set in Port.Text (TextBox) - 125
wsock.Connect ''Set connection
Do
DoEvents
Loop Until wsock.State = sckConnected
End Sub
Private Sub Command2_Click() ''|Disconnect| button
wsock.Close ''Close connection
End Sub
Private Sub Command3_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection. If the connection is available, to send a message
wsock.SendData " Web site http://www.oflameron.com"
End Sub
Private Sub Command4_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection
wsock.SendData "NOTEPAD" ''Load Notepad on Server
End Sub
Private Sub Command5_Click()
If wsock.State <> sckConnected Then Exit Sub '' To check the connection
wsock.SendData "END" ''Sent TEXT command on Server
End Sub
Private Sub Timer1_Timer()
Label1.Caption = wsock.State
End Sub

مقدار RemoteHost هم 192.168.1.2 قرار دادین؟! (چون این آدرس شبکه خانگی است نه server-remote-host)

پس باید چی بزارم ؟

محسن واژدی
سه شنبه 19 اردیبهشت 1391, 19:40 عصر
پس باید چی بزارم ؟
در این قسمت بایستی هاست مقصد را مشخص کنیم، IP یا آدرس هاستی که میخواهیم به آن متصل شویم (مثلا چه بنویسیم google.com و چه IP ان 173.194.35.169 هردو یکسان است)، اما آدرس 192.168.1.1، 192.168.1.2، 192.168.1.x تنها یک آدرس شبکه داخلی است که نهایت ارتباط آن، با سایر رایانه های موجود در آن شبکه از طریق router است،
برای بدست آوردن ip سایت هم میتوانید از آدرس سایت ping بگیرید


موفق باشید

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 21:24 عصر
خب ببینید من می خوام به سرور برناممم متصل بشم . توی کامپیوتری که سرور روی اون اجرا میشه با دستور ipconfig این آی پی رو به من میده .من حالا بخوام به سرور برنامم متصل بشم باید چه آی پی وارد کنم ؟

Mr'Jamshidy
سه شنبه 19 اردیبهشت 1391, 23:35 عصر
بهترین کار برای گرفتن IP شبکه یک سیستم گرفتن Status شبکه هست

برای این کار روی Local Area Network در شبکه های کابلی و یا روی Wireless Network در شبکه های بیسیم راست کلیک کرده و گزینه Status رو انتخاب کنید

سپس در صفحه باز شده روی گزینه Details کلیک کنید

در صفحه جدید مقابل گزینه IPv4 Address ای پی کامپیوتر شماست (ویندوز 7)

حتما شبکه رو چک کنید که آی پی تعریف شده باشه و روی گزینه Obtain an IP Address Automatically نباشه چون در این حالت هر بار که شبکه فعال بشه آی پی جدیدی به سیستم نصبت داده میشه و برنامه شما به مشکل میخوره (به احتمال این که شما این ها رو بلد نیستید)

موفق باشید

ho3ein.3ven
سه شنبه 19 اردیبهشت 1391, 23:53 عصر
من ویندوزم xp هست . این چیزا هم پیدا نکردم . اگه میشه بیشتر توضیح بدین.

محسن واژدی
چهارشنبه 20 اردیبهشت 1391, 09:55 صبح
من ویندوزم xp هست . این چیزا هم پیدا نکردم . اگه میشه بیشتر توضیح بدین.
تاپیک زیر رو بررسی کنید:
http://barnamenevis.org/showthread.php?37782-%D8%A8%D9%87-%D8%A7%D8%B4%D8%AA%D8%B1%D8%A7%DA%A9-%DA%AF%D8%B0%D8%A7%D8%B4%D8%AA%D9%86-adsl-%D8%AF%D8%B1-%DB%8C%DA%A9-%D8%B4%D8%A8%DA%A9%D9%87-%D8%AF%D8%A7%D8%AE%D9%84%DB%8C

یا صفحه زیر:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/howto_enable_dhcp.mspx

موفق باشید

ho3ein.3ven
چهارشنبه 20 اردیبهشت 1391, 13:11 عصر
واقعا به خاطر پاسخ هاتون ممنونم . متاسفانه چیزی از اینا دستگیرم نشد . ولی یه سورس پیدا کردم که آی پی رو نشون میده آی پی منو این نشون داد 176.67.67.46
ولی خب بازم به سرور متصل نمیشه . البته هم سرور و هم کلاینت رو رو یه سیستم اجرا کردم . مقدار stat هم 8 میشه. ممنونم

ho3ein.3ven
پنج شنبه 21 اردیبهشت 1391, 15:29 عصر
کسی نظری نداره ؟

m.4.r.m
پنج شنبه 21 اردیبهشت 1391, 16:04 عصر
این همه توضیح حتما مشکل از نرم افزار شماست عزیزم دسوتان کلی کمکت کردن

ho3ein.3ven
پنج شنبه 21 اردیبهشت 1391, 16:30 عصر
میدنم مشکل از نرم افزارم هست ولی خب کمک می خوام که مشکلش رو حل کنم.

ho3ein.3ven
پنج شنبه 21 اردیبهشت 1391, 17:34 عصر
خب دوستان شما میگین که کانکشن روی optain an ip address automatically نباشه . اگر روی این گزینه نباشه باید روی use the flowing ip address باشه . اگر روی این گزینه باشه باید گزینه های ip address - subnet mask - default getway پر بشه . اینارو چی باید بزارم ؟

ho3ein.3ven
جمعه 22 اردیبهشت 1391, 21:13 عصر
با سلام . فهمیدم مشکل کجاست .سرور برنامه رو بردم تو vps بعد آی پی وی پی اس رو تو کلاینت دادم . برنامه کار کرد . باید آی پی local area connection رو به صورت دستی بدم . اگه کسی این کارو بلده لطفا جواب بده.
ممنون از همه