انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: farsijava در 27 آبان 1387، 09:48 بظ
-
سلام
من می خوام برنامه نویسی شبکه رو یادبگیرم با سی. یه کد نوشتم ولی یه دستور bind که میرسه خطا می گیره. این دستور bind :
int result=bind(fd,(sockaddr *) &my_addr,sizeof(sockaddr));
این هم اروری که میده:
bind: Cannot assign requested address
پورتی هم که انتخاب کردم پورت 6000 هست
-
این لینک به کار ات می یاد؟
http://forum.ubuntu.ir/index.php/topic,5667.0.html
-
ممنون
برنامه شما بدون ایراد اجرا شد ولی من از اول اومدم بنویسم اینجوری شده:
#include <sys/socket.h>
#include <sys/types.h>
#include <iostream>
#include <netint/in>
#include <string>
#define MYPORT 6000
using namespace std;
int main() {
//sockaddr_in my_addr;
int fd;
sockaddr_in my_addr;
if ((fd=socket(AF_INET,SOCK_DGRAM,0))==-1){
perror("socket");
return 0;
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(MYPORT);
my_addr.sin_addr.s_addr=htons(INADDR_ANY);
memset(&(my_addr.sin_zero),'\0',8);
return 0;
}
تو خط تعریف my_addr ایراد می گیره و خطا میده.
میگه اینجا جاش نیست ](*,)
-
لطفا خروجی ها ی ارور رو کامل بده
و قبل ش هدر ها تو بررسی کن. وقتی اشکال در تعریف یک متغیر باشه! یعنی نوع داده ایش تعریف نشده است.
برای سوکت هم نیازی ب نصب کتابخانه ی خاصی نبود (اگر درست یادم باشه!! )
-
هدر ها رو فکر می کنم همین ها هست و چیز دیگری نباید باشه حالا بعدا دورباره نگاه می کنم ولی خروجی این هست:
main.cpp:4:21: error: netint/in: No such file or directory
main.cpp: In function ‘int main()’:
main.cpp:13: error: ‘sockaddr_in’ was not declared in this scope
main.cpp:13: error: expected `;' before ‘my_addr’
main.cpp:18: error: ‘my_addr’ was not declared in this scope
main.cpp:19: error: ‘htons’ was not declared in this scope
main.cpp:20: error: ‘INADDR_ANY’ was not declared in this scope
main.cpp:21: error: ‘memset’ was not declared in this scope
-
خب ببین!الان ی هدر داری با ایم اسم
#include <netint/in>
که ظاهر ش هم یکمی مشکوک میزنه! هدر مروبط به چی هستش؟ پیشنهاد می کنم برای تست هم که شده کل هدر هات رو حذف و اونایی رو که روی پستم بود رو جایگزین کن. چون مشکل باید هدر ای باشه!
ثابت هایی مثل INADDR_ANY هم روی همین هدر هاست.
-
سلام
بله با عوض کردن هدر ها با مال شما درست شد.
ولی هدرهای sockaddr_in مگه همین sys/sock و sys/types نیست؟
این هدر netinet/in هم اگر اشتباه نکنم مال inet_addr هست.
ممنون
-
این یکی رو ارجاع میدم ات به رفرنس کدنویسی سوکت در لینوکس! ;) راستش زیاد یادم نمی مونه این نکات...
پوزش می طلب ام @};-
-
بازم ممنون
به هر حال کار ما که راه افتاد =;