برنامه نویسی Socket در Qt

سلام.قبلا یه برنامه نوشتیم که به کمک برنامه نویسی Socket وصل میشد به دستگاه و لامپ رو روشن و خاموش میکرد.توی این پست برنامه رو براتون تشریح میکنیم.

بعد از اینکه توی Qt یه پروژه ی GUI ساختین توی فایل *.pro این خط رو اضافه کنید:

QT+=network
بعدش وارد فایل mainwindow.h بشین و کد زیر رو اضافه کنید:
#include<QtNetwork>

این فایل پر از کلاس های مفیده برای کار با سوکت.انواع کلاس های آماده برای دانلود،ارسال هدر و... توی این فایل تعریف شده.

از اونجایی که ما توی این برنامه نقش یک Client رو بازی کردیم باید یه سوکت بسازیم و وصل شیم به آی پی یا آدرس مورد نظر.لازم نیست درگیر پیچیدگی های ساخت سوکت بشیم.کافیه یه شی از کلاس QTCPSocket بسازیم.تو فایل mainwindow.h داخل کلاس MainWindow (تو قسمت private یا public) این خط رو اضافه میکنیم:
QTcpSocket*_socket;

با فایل mainwindow.cpp میریم و داخل سازنده ی این کلاس مینویسیم:

_socket=newQTcpSocket;

خب.وقتی اتصال اتفاق می افته این شی (_socket) یه تابعی رو به اسمconnected رو فراخوانی میکنه.(سیگنال connected رو ارسال میکنه).ما یه SLOT تو فایل mainwindow.h برای کلاس MainWindow تعریف کردیم تا وصلش کنیم به تابع یه سیگنال connected.

خب ما برای اتصال این سیگنال به تابعمون از دستور connect استفاده میکنیم که مخصوص Qt هستش.برای این کار بعد از تعریف شی مینویسیم:
connect(_socket,SIGNAL(connected()),this,SLOT(connected()));

دقت کنید تابعی که تعریف کردیم هم اسمش connected هستش.

حالا باید وصل شیم به آی پی مورد نظر.کلاس QTCPSocket یک تابعی ارائه میده به اسمconnectToHost که آدرس و پورت مورد نظر رو میگیره و بهش وصل میشه.پارامتر اول آدرس و پارامتر دوم برای این تابع شماره پورت هستش.پارامتر اول باید تبدیل بشه به یه سری استانداردهای لازم برای ارتباطات.کلاس QHostAddress اینکار رو برامون می کنه.تو سازنده ی این کلاس می تونیآدرس مورد نظر رو بسازید تا شی مورد نظر از این کلاس ساخته بشه.در کل به صورت زیر می تونیم به هاستمون وصل شیم:

_socket->connectToHost(QHostAddress("192.168.16.254"),8080);

به محض اتصال تابع connected اجرا میشه.ما تو این تابع خواستیم یه پیام نمایش داده بشه مبنی بر اتصال موفقیت آمیز و البته دکمه ی روشن و خاموش رو هم فعال کردیم.دکمه ی اتصال رو هم غیر فعال کردیم:

voidMainWindow::connected(){
QMessageBox::information(this,"Connection",QString::fromUtf8("اتصال با موفقیت انجام شد."));
ui->btnlight1_onoff->setEnabled(true);
ui->btnconnect->setEnabled(false);
}

تو رویداد دکمه ی روشن خاموش هم یه برنامه نوشتیم که دوتا کاراکتر خاص رو ارسال میکنه برای دستگاه.دستگاه با دریافت حرف A لامپ رو روشن و با دریافت حرف B لامپ رو خاموش می کنه.والبته همزمان تیتر دکمه رو هم عوض میکنه.برای نوشتن تو سوکت ساخته شده کلاس QTCPSocket یه تابع به اسم write ارائه میده و یه پارامتر دریافت میکنه برای ارسال:
voidMainWindow::on_btnlight1_onoff_clicked()
{
staticboolflag=0;
if(flag==0){
flag=1;
_socket->write("A\n");
ui->btnlight1_onoff->setText(QString::fromUtf8("خاموش کردن"));
}else{
flag=0;
_socket->write("B\n");
ui->btnlight1_onoff->setText(QString::fromUtf8("روشن کردن"));
}
}
 
سوکت نویسی تو Qt مثل آب خوردنه.منتها باید باهاش آشنا بشید.امیدوارم مفید بوده باشه.
می تونید سورس رو دوباره دانلود کنید!

سوالات خودتون رو در تالار سایت Forum مطرح کنید


دانلود کنید

موضوع را به اشتراک بگذارید

درباره نویسنده

امید آقاخانی هستم مدیر کامپیوتر دانشجو
به شدت به دنیای برنامه نویسی علاقه دارم و برنامه نویسی به خودی خود اشتراک منابع را به ارمغان می آورد
در زمینه های برنامه نویسی اندروید و iOS و وب سایت با زبان شیرین PHP و کمی ویندوز با سی شارپ فعالیت میکنم

امیدوارم سهم خود از خدمت به میهنم را به خوبی انجام داده باشم