در این آموزش از سری آموزش زبان برنامه نویسی پایتون در سایت چ یاب قصد داریم به بررسی یک پروژه بپردازیم. پروژه ی چت ساده با استفاده از برنامه نویسی سوکت! تا انتهای پست همراه ما باشید… همچنین در آخر میتوانید ویدیوی آموزش اجرای این پروژه را ببینید.
بله در ادامه یاد میگیرید که به راحتی یک برنامه برای ایجاد ارتباط بین یک سرور و کلاینت ایجاد کنید و محیطی برای چت بین دو طرف فراهم آورید. اگر به دنبال آموزش زبان برنامه نویسی پایتون رایگان میگردید؛ میتوانید به “محبوب مثل پایتون!” مراجعه کنید. این پست مقدمهای مناسب بر زبان پایتون است.
در زبان برنامه نویسی پایتون، سوکت یا network socket یک ماژول برای ایجاد ارتباطات بین دو کامپیوتر است. این ماژول از دو واسط برای دسترسی به شبکه استفاده میکند. یکی low-level نام دارد و اتصالات آن وابسته به پلتفرم هستند؛ مانند Telnet و دیگری high-level است و اتصالات آن واسته به اپلیکیشن یا لایه کاربرد شبکه هستند. مانند HTTP، FTP و SMTP. در این آموزش به طور اختصاصی یک ارتباط سوکت بین سرور و کلاینت ایجاد میکنیم و با استفاده از پروتکل TCP/IP پیامها را بین دو کامپیوتر جابجا میکنیم.
برای ایجاد چنین ارتباطی نیازمند دو کد پایتون جداگانه هستیم. یک کد یا اصطلاحا اسکریپت برای سرور و دیگری برای کلاینت. سرور یک دعوت نامه برای کلاینت میفرستد و پس از پذیرفتن این دعوت نامه توسط کلاینت، ارتباط برقرار میشود و پیامها رد و بدل میشوند.
اسکریپت سرور (server)
برای ارتباط با کلاینت، در قسمت سرور باید یک سری از توابع به صورت متوالی فراخوانی شوند. این توابع socket، bind، listen و accept هستند که برای ایجاد ارتباط با هر کلاینت در زبان پایتون باید فراخوانی شوند. یعنی اگر میخواهید با بیش از یک کلاینت ارتباط برقرار کنید باید دوباره این توالی را تکرار کنید.
توضیحات مربوط به مهمترین توابع استفاده شده در کد پایتون برنامهی چت، در ادامه آمده است:
- socket: با استفاده از مشخصاتی همچون آدرس، نوع سوکت و پروتکل، یک سوکت ایجاد میکند.
- bind: سوکت را به آدرس داده شده متصل میکند. (نام هاست یا میزبان، شماره پورت )
- listen: سرور را قادر میسازد تا ارتباطات از طرف کلاینت را ببیند و بپذیرد.
- accept: صبر میکند و درخواست ارتباط از طرف کلاینت را میپذیرد.
- gethostname: نام هاست یا اصطلاحا میزبان ماشین را برمیگرداند.
- gethostbyname: نام هاست را میگیرد و آدرس IPv4 آن را بازمیگرداند.
- recv: پیامهایی را که در ارتباط TCP ارسال شدهاند، دریافت میکند.
- decode: با استفاده از روشهای مخصوص، پیام را از حالت کد شده خارج میکند و به همان حالت قابل فهم تبدیل میکند.
- send: پیامهایی را که در TCP آماده شدهاند ارسال میکند.
اما برنامه نویسی سوکت در زبان پایتون به این چند تابع محدود نمیشود؛ اگر مایل هستید بیش از این در مورد سوکت پروگرمینگ در زبان برنامه نویسی پایتون بدانید، میتوانید به سایت رسمی پایتون مراجعه کنید.
کد سرور:
# server.py
import time, socket, sys
print("\nWelcome to Chat Room\n")
print("Initialising....\n")
time.sleep(1)
s = socket.socket()
host = socket.gethostname()
ip = socket.gethostbyname(host)
port = 1234
s.bind((host, port))
print(host, "(", ip, ")\n")
name = input(str("Enter your name: "))
s.listen(1)
print("\nWaiting for incoming connections...\n")
conn, addr = s.accept()
print("Received connection from ", addr[0], "(", addr[1], ")\n")
s_name = conn.recv(1024)
s_name = s_name.decode()
print(s_name, "has connected to the chat room\nEnter [e] to exit chat room\n")
conn.send(name.encode())
while True:
message = input(str("Me : "))
if message == "[e]":
message = "Left chat room!"
conn.send(message.encode())
print("\n")
break
conn.send(message.encode())
message = conn.recv(1024)
message = message.decode()
print(s_name, ":", message)
اسکریپت کلاینت (client):
کد مربوط به کلاینت نیز مانند کد سرور، یک توالی از توابع دارد. توابعی همچون socket و connect که برای ارتباط با سرور مورد استفاده قرار میگیرند. در ادامه نیز توضیحات کوتاهی در مورد این دوتابع آورده ایم:
- socket: یک ارتباط سوکت با استفاده از آدرس، نوع سوکت و پروتکل ایجاد میکند.
- connect: به سرور سوکت در آدرس مشخص، متصل میشود.
کد کلاینت:
# client.py
import time, socket, sys
print("\nWelcome to Chat Room\n")
print("Initialising....\n")
time.sleep(1)
s = socket.socket()
shost = socket.gethostname()
ip = socket.gethostbyname(shost)
print(shost, "(", ip, ")\n")
host = input(str("Enter server address: "))
name = input(str("\nEnter your name: "))
port = 1234
print("\nTrying to connect to ", host, "(", port, ")\n")
time.sleep(1)
s.connect((host, port))
print("Connected...\n")
s.send(name.encode())
s_name = s.recv(1024)
s_name = s_name.decode()
print(s_name, "has joined the chat room\nEnter [e] to exit chat room\n")
while True:
message = s.recv(1024)
message = message.decode()
print(s_name, ":", message)
message = input(str("Me : "))
if message == "[e]":
message = "Left chat room!"
s.send(message.encode())
print("\n")
break
s.send(message.encode())
راهنمای اجرای کد
در انتهای همین پست آموزش اجرای کد به صورت ویدیویی قرار داده شده است.
1- اسکریپت server.py و server.py را بر روی صفحه ی اصلی کامپیوتر قرار دهید. (برای راحتی بیشتر این فایل ها را به عنوان مثال بر روی دسکتاپ قرار دادهایم، اما میتوانید در هر مکانی که مایل هستید فایلها را قرار داده و سپس به جای desktop آدرس مورد نظر را وارد کنید.)
2- عبارت cmd را در قسمت جستجوی ویندوز، وارد کنید و برنامه را باز کنید.
3- با استفاده از دستور cd، پوشهی جاری را میتوانید تغییر دهید. در اینجا چون فایلها را در دسکتاپ قرار دادیم، پس همان desktop را به عنوان پوشهی جاری وارد میکنیم.
4- پس از آنکه آدرس محل قرارگیری فایلها را پس از دستور cd وارد کردید؛ دستور py server.py را اجرا کنید. پس از آن کد زبان پایتون، اجرا میشود.
5- پس از آن یک نام برای سرور وارد کنید و enter را بزنید.
6- یک cmd دیگر باز کنید و دقیقا مشابه مراحل 1 تا 4 عمل کنید با این تفاوت که این بار پس از دستور py، نام client.py را باید وارد کنید.
7- IP مشخص شده توسط سرور را عینا وارد کنید. سپس یک نام برای کلاینت تخصیص دهید و enter را بزنید تا اتصال برقرار شود.
8- اکنون میتوانید به ارسال پیام و چت کردن بپردازید.
چندکلام با چ یاب:
در این آموزش سعی کردیم در کوتاهترین و سادهترین حالت ممکن یک برنامهی چت با استفاده از زبان برنامه نویسی پایتون ایجاد کنیم. اگر در مراحل اجرا و یا درک کد برنامه مشکل داشتید، میتوانید در قسمت نظرات با ما در میان بگذارید. همچنین منتظر انتقادات، پیشنهادات و نظرات شما دوستان هستیم.
در ادامه آموزش ویدیویی این مطلب را مشاهده میکنید.
راستی!
جهت اطلاع از آخرین اخبار و آموزشهای ما میتوانید در کانال تلگرام چ یاب عضو شوید.




















سلام ممنون از آموزش خوب تون فقط چطوری میشه که فارسی تایپ کنم
نگه داشتن alt و زدن shift⬆️ البته اگه فارسی روی سیستمتون نصبه
سلام
میتونید کمکم کنید که بتونم چیزی درست کنم که با جا های دیگه هم ارتباط کرد
مثلا من تهران باشم یکی دیگه از همین برنامه استفاده کنه و اون یکی مثلا آلمان باشه
و با هم بتونیم ارتباط برقرار کنیم
سلام دوست عزیز، سایر کامنتهای همین پست رو بخونید قبلا به سوالی با این مضمون پاسخ دادیم که میتونه برای شما هم مفید باشه
سلام میشه از راه دور ارتباط برقرار کرد؟مثلا یکی از تهران و یکی از تبریز باهم با این برنامه حرف بزنن
سلام خیر این برنامه ساده هستش و برای اجرا روی یک سیستم و یک شبکه محلی نهایتا، طراحی شده و از طریق اینترنت قابلیت اتصال نداره.