ارتباط TCP در جاوا:
Socket Programming in Java with TCP.
در این تاپیک سعی شده به شکلی ساده، برقراری ارتباط کلاینت – سرور با استفاده سوکت پروگرمینگ، با استفاده ازTCP توضیح داده شود. امید است اساتید و دوستان با ارسال نظرات خود، گامی موثر در زمینه برنامه نویسی تحت شبکه در جاوا، در این سایت بردارند.(با تشکر از دوست همکار عزیزم محسن ثقفی که در تهیه این مقاله همراهم بود)
همانطور که می دانید پروتکل TCP یک پروتکل اتصال گراست. بدین معنی که بر قراری یک ارتباط قبل از هرگونه انتقال اطلاعات الزامیست. همچنین ارتباط ایجاد شده تا پایان انتقال اطلاعات، بین کلاینت و سرور بر قرار می باشد.
از آنجایی که این ارتباط، دارای دو بخش کلاینت و سرور می باشد لذا مراحل آماده سازی جهت این ارتباط، در دو مرحله جدا گانه توضیح داده می شود:
بخش سرور:
پیاده سازی بخش سرور شامل پنج مرحله به شرح زیر می باشد:
1-ایجاد سوکت سرور (ServerSocket object):
آرگومان ایجاد سرور سوکت، یک شماره پورت آزاد می باشد که از محدوده پورت های غیر رزرو (1024 تا 65535) باید انتخاب شود.
ServerSocket mySock = new ServerSocket (1234);
در این مثال یک سرور سوکت با نام mySock بر روی پورت 1234 تعریف شده است.
2-قرار دادن سرور در حالت انتظار:
سرور در انتظار اتصال کلاینت می ماند. این کار با متد accept از کلاس ServerSocket انجام می شود. در واقع سرور با این فرمان در انتظار درخواستی از طرف کلاینت می ماند و به پرت تعریف شده در سرور سوکت (در اینجا 1234) گوش می دهد. خروچی این متد، یک شی از جنس سوکت است که از این به بعد، معرف کلاینتی است که پیغامی را به سرور فزستاده است.
Socket mylink = mySock.accept ();
برنامه سرور، در این خط منتظر یک پیفام از طرف یکی از کلاینتها می ماند. پس از گذر از این خط ، یعنی یک کلاینت درخواستی را ارسال کرده است و ما با mylink به آن دسترسی داریم.
3-تنظیم جریان های (Streams) ورودی و خروجی:
متد های getInputStream() و getOutputStream() از کلاس Socket ، برای دست یابی به جریانهایی برای انتقال اطلاعات بین کلاینت و سرور بکار می رود.
DataInputStream input = new DataInputStream( mylink.getInputStream() );
DataOutputStream output=new DataOutputStream(mylink.getOutputStream());
4-ارسال و دریافت اطلا عات:
با تعریف input و output در مرحله سوم، جریانی مستقیم بین کلاینت و سرور برای ارسال و دریافت اطلاعات فزاهم شده است. در این تاپیک برای ارسال اطلاعات از writeUTF() و برای دریافت اطلاعات از readUTF() استفاده شده است. این توابع برای ارسال متن، به خوبی کار می کنند. برای ارسال دیگر انواع داده ای باید از متد های خاص برای ارسال آن نوع اطلاعات استفاده کرد.
Output.writeUTF (“wait for data”);
String request = input.readUTF ();
5-بستن ارتباط بعد از خاتمه کار:
در پایان انتقال اطلاعات، دیگر نیازی به این کانکشن نیست. بهتر است آن را ببندیم.
Mylink.close ();
بخش کلاینت:
پیاده سازی بخش کلاینت شامل چهار مرحله به شرح زیر می باشد:
1-بر پا کردن یک ارتباط با سرور:
برای این منظور یک سوکت با دو پارامتر زیر تعریف می کنیم:
- آدرس IP سرور ( از جنس InetAddress ).
- پورت مورد نظر برای بر قراری ارتباط که سرور به این پورت گوش می دهد . در اینجا فرض می کنیم آدرس IP سرور عدد 192.168.100.67 باشد.
InetAddress ip=InetAddress.getByName("192.168.100.67");
Int port=1234;
Socket mylink=new Socket (ip, port);
2-تنظیم جریان های (Streams) ورودی و خروجی:
این بخش دقیقا مانند قسمت سوم سرور می باشد.
3- ارسال و دریافت اطلا عات:
این بخش نیز همانند بخش چهار سرور می باشد.
4- بستن ارتباط بعد از خاتمه کار:
این بخش نیز عیناً مشابه مرحله 5 سرور می باشد.
mylink.close ();