PDA

View Full Version : سوال: استفاده از کتابخانه socket.h



python_85
دوشنبه 12 مرداد 1388, 13:51 عصر
سلام
من یک هدر با سی داشتم که برای ارتباط با سرور از اون استفاده می کردم
این هدر از کتابخونه sys/socket.h
استفاده می کرد
حالا اومدم تما ماین هدر رو وارد یک کلاس کردم
ولی وقتی تابع connect
رو برای برقرار کردن ارتباط صدا می زنم برنامه خطا می ده و اجرا نمی شه
خطا هم اینه:

error: no matching function for call to ‘myclass::connect(int&, sockaddr*, unsigned int)’ولی وقتی تابع bind
رو که از نظر بارامتر ورودی مثل connect هست رو استفاده می کنم هیچ خطایی نمی ده و برنامه اجرا می شه



این هم تابع :


int myclass::OpenPort()
{
// error("Passed step 1");
server = gethostbyname(hostname);
if(server == NULL)
{
error("ERROR, no such host\n");
return 0;
}
else
{
// error("Passed step 2");
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port = htons(portno);
// error("Passed step 3");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
error("ERROR opening socket");
return 0;
}
// error("Passed step 4");
//socklen_t mm=sizeof(serv_addr);

//if(connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) <0)
//{
//error("ERROR Connection");
//return 0;
//}
int res=0;
try
{

res= bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr));//connect(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr));
}
catch(int errnumber)
{
res= 0;
}

return res;
}
}

نمی دونم ایراد از کجاست؟
راستی فرق bind با connect چی هست؟

حامد مصافی
پنج شنبه 15 مرداد 1388, 16:12 عصر
امضای لیست آرگومان های ارسالی به تابع connect با پارامتر های دریافتی در این تابع یکسان نیستند. بهتر بود کد تابع connect را هم ذکر می کردید.

python_85
شنبه 17 مرداد 1388, 18:13 عصر
سلام
خیلی ممنون
آره میدونم خطا از بارامترهای ورودی هست برا همین هم میگم که عجیب اینه که تابع bind که از نظر امضا عین connect هست رو ایراد نمی گیره
تابع connect جزی از کتابخونه sys/socket.h باید باشه

extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
__THROW;راستی این __THROW که آخر تابع بایند نوشته چیه؟

majnoon and
چهارشنبه 13 آبان 1388, 22:53 عصر
سلام خسته نباشيد
كدنويسي وبرنامهSOCKETونخ باتوضيحات كامل كدنويسي بازبان بيسيك وتاريخچه وتوضيح زياد درموردسوكت ونخ براي مقاله ام لازم دارم.