تبلیغات

نسل باران

|

بانک شماره و موبایل popup window

قالب های حرفه ای وردپرس

|

پلاگین وردپرس popup window

وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد - اموزش برنامه نویسی سوکت - Socket Network Programming
نسل باران
وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد
امام علی (ع) می فرمایند: « زکات العلم نشرهُ» زکات علم نشر آن است.
به سایت ما خوش آمدید


اموزش برنامه نویسی سوکت

 Socket Network Programming

بعد از یاد گیری توابع ماژول سوکت و متدهای تابع سوکت باید نحوه ی استفاده از اینها را ( که همان برنامه نویسی برای سوکت می شود) بیاموزید.

  • انواع سوکت ها :

در میان سوکت ها دو نوع سوکت وجود دارند که از همه مهم ترند :

  • 1.سوکت های نوع استریم که سوکتهای Connection Oriented نامیده می شود.(مبتنی بر TCP)
  • 2.سوکت های نوع دیتاگرام که سوکتهای Connectionless نامیده می شود.(مبتنی بر UDP)

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

  • Server/Client :

با این موضوع اشنا هستید که هر ارتباطی دو طرفه است. این ارتباط از یک طرف درخواست می شود و طرف دوم ارتباط را می پذیرد (می تواند رد کند) تا از این طریق بتوانند مبادله داده ها و اطلاعات کنند. برنامه ی شروع کننده ارتباط ( در خواست کننده ارتباط ) را برنامه مشتری (Client) می نامند یعنی این برنامه به دنبال برنامه ای است که با ان مبادله داده کند. برنامه ای که این درخواست را قبول یا رد می کند برنامه سرویس دهنده (Server) می گویند.یعنی این برنامه منتظر درخواست می ماند تا در صورت پیدا کردن مشتری با ان ارتباط برقرار کند. نکته: در یک ارتباط برنامه مشتری بیشتر نیازمند داده ها و اطلاعات است و برنامه سرویس دهنده این داده ها و اطلاعات را در اختیار برنامه مشتری قرار می دهد.

  • نوشتن برنامه سرویس دهنده:

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

  • 1. باید یک سوکت برای ارتباط اماده کنیم. این سوکت می تواند از نوع سوکت استریم یا دیتاگرام باشد. که مطمعنا ما از نوع استریم استفاده می کنیم.
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

توضیح: ارگومان اولی که متد سوکت گرفته(یعنی AF_INET) برای مشخص کردن خانواده پروتوکل است و چون پروتوکل مورد بحث ما TCP/IP است این تابع ثابت است.

  • 2. بعد از باز کردن سوکت باید به ان یک شماره پورت اختصاص دهیم تا برنامه مشتری به ان متصل شود.

می توانیم یک ادرس هاست هم به ان اختصاص دهیم

socket.bind((HOST, PORT))
  • 3. مرحله بعد پذیرفتن تقاضاهای ارتباط است این تقاضاها می تواند به تعداد متعددی باشد. که ما باید تعداد پذیرفتن تقاضا را تعیین کنیم.

نکته: این مطلب یادتان باشد که پذیرش تقاضای ارتباط به معنی پذیرفتن داده نیست بلکه فضای لازم برای ارسال و دریافت داده ایجاد می کند.

socket.listen(1)
  • 4. با استفاده از تابع accept() می توانید تقاضاهای معلق را در صورت وجود به برنامه شما معرفی کند.
socket.accept()
  • 5. از توابع send() و recv() برای ارسال و دریافت داده می توان استفاده کرد.
  • نوشتن برنامه مشتری:

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

  • 1. همانند برنامه سرویس دهنده برنامه مشتری هم باید یک سوکت باز کند تا برنامه سرویس دهنده بتواند با ان ارتباط داشته باشد(برای ارسال و دریافت داده)
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • 2. در ادامه ما باید یک درخواست به برنامه سرویس دهنده ارسال کنیم تا اگر اماده باشد اجازه متصل شدن ما به سرویس دهنده را بدهد.
socket.connect((HOST, PORT))
  • 3. از توابع send() و recv() برای ارسال و دریافت می توان استفاده کرد.
  • مثال :

این مسایلی که در بالا توضیح داده شد بسیار اسان بود ولی بحث سوکت به این اسانی که من توضیح دادم نیست .توضیح من شما را با کلیت کار اشنا کرد. برای اینکه یکم بیشتر در مورد این موضوعی که شروع کردیم بفهمید بهتره کد زیر را مطالعه کنید.

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning the local host
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()
# Echo client program
import socket

HOST = 'localhost'    # The remote host
PORT = 50007              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', `data`

یه مثال دیگه ای که یکم پیچیده تره...

# Echo server program
import socket
import sys

HOST = ''                 # Symbolic name meaning the local host
PORT = 50007              # Arbitrary non-privileged port
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
    af, socktype, proto, canonname, sa = res
    try:
	s = socket.socket(af, socktype, proto)
    except socket.error, msg:
	s = None
	continue
    try:
	s.bind(sa)
	s.listen(1)
    except socket.error, msg:
	s.close()
	s = None
	continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()
# Echo client program
import socket
import sys

HOST = 'localhost'    # The remote host
PORT = 50007              # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
    af, socktype, proto, canonname, sa = res
    try:
	s = socket.socket(af, socktype, proto)
    except socket.error, msg:
	s = None
	continue
    try:
	s.connect(sa)
    except socket.error, msg:
	s.close()
	s = None
	continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(1)
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', `data`





نوع مطلب : Socket Programming، برنامه نویسی، 
برچسب ها :
لینک های مرتبط :

1396/06/27 08:35
Spot on with this write-up, I absolutely believe this amazing site needs much
more attention. I'll probably be returning to read
more, thanks for the info!
1396/05/17 13:25
It's remarkable to visit this web site and reading the views
of all mates about this piece of writing, while I am also keen of getting know-how.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ


امام صادق(ع) می فرمایند: «اِنُّ لِکلِّ شیءٍ زکاةً و زکاةُ العِلمِ اَنْ یُعَلِّمَهُ اَهلَهُ» برای هر چیزی زکاتی است،و زکات علم آن است که آن را به اشخاص شایسته بیاموزید. (منبع: تحف.ص 364)

امام علی (ع) می فرمایند: « زکات العلم نشرهُ» زکات علم نشر آن است.

مدیر وبلاگ : s1390
مطالب اخیر
نویسندگان
صفحات جانبی
آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :
فرم تماس
نام و نام خانوادگی
آدرس ایمیل
امکانات دیگر
دریافت كد ختم صلوات
کلیه حقوق این وبلاگ برای وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد محفوظ است