ورود

View Full Version : سوال: راهنمایی برای کامل کردن این برنامه سوکت به صورت چت!



turbo_boy2006
پنج شنبه 23 دی 1389, 12:53 عصر
سلام
دوستان اگه میشه کمک کنید من اینو تا اینجا با ++c تو بورلند کامل کردم و هر دو سرور و کلاینت رو در سیستم خودم تست کردم و فقط میخوام به صورت چت کنمش....الآن توابع send تو سرور و recive تو کلاینت ، رو میخوام...ممنون میشم این دو رو واسم بنویسید و راهنمایی کنید...:اشتباه:...من نتونستم هر چه قد فک کردم....
راستی یه مشکل هم داره برنامم عکس زیر رو ببینید....واسه کلمات جدا به صورت جمله ! (عکس پایینی برنامه کلاینت هست و بالایی سروره ) : http://xm.comli.com/images/67b2cc82cecc.png

اینم برنامه کلاینت :


/* talker.cpp -- a datagram sockets "client" demo */
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "Ws2_32.lib")
#define MYPORT 4950 //the port users will be connecting to

int main()
{
char a[50];
WSAData myWsa;
SOCKET sockfd;
struct sockaddr_in their_addr;
//Open connection and test it.
if ( WSAStartup(MAKEWORD(2,0), &myWsa) != 0 ){
WSACleanup();
return true;
}
if ((sockfd = socket(PF_INET,SOCK_DGRAM,0)) == -1){
perror("socket");
exit(1);
}
their_addr.sin_family = AF_INET;// host byte order
their_addr.sin_port = htons(MYPORT);// short, network byte order
their_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

while( (a[0]!='b')||(a[1]!='y')||(a[2]!='e') )
{
cout<<"C : ";
cin>>a;

if (( sendto(sockfd,a, strlen(a), 0, (sockaddr*)(&their_addr),sizeof(sockaddr))) == -1){
cout<<"sendto";
exit(1); }

}

closesocket(sockfd);


return 0;

}

این هم سرور :



/*server,listener.c -- a datagram sockets "server demo" */
#include <stdio.h>
#include <winsock2.h>
#include <iostream.h>
#pragma comment (lib, "Ws2_32.lib")
#define MYPORT 4950 //the port users will be connecting to
#define MAXBUFLEN 256
int main(void)
{
WSAData myWsa;
SOCKET sockfd;//My Socket
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int addr_len;
int numbytes;
char buf[MAXBUFLEN];
//Open connection and test it.
if ( WSAStartup(MAKEWORD(2,0), &myWsa) != 0 ){
WSACleanup();
return true;
}
//Opening DataGram Socket.
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == INVALID_SOCKET)
{
fprintf(stderr, "Could not create socket.\n");
WSACleanup();
exit(0);
}
my_addr.sin_family = AF_INET;// host byte order
my_addr.sin_port = htons(MYPORT);// short, network byte order
my_addr.sin_addr.s_addr = INADDR_ANY;// automathically filled by my IP
memset(&(my_addr.sin_zero),'\0',8);// zero the rest of the struct
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == INVALID_SOCKET){
perror("bind");
exit(1);
}
addr_len = sizeof(struct sockaddr);
//Recive Data from Client
while( (buf[0]!='b')||(buf[1]!='y')||(buf[2]!='e') )
{

if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1, 0, (struct sockaddr *) &their_addr,&addr_len)) == INVALID_SOCKET){
perror("recvfrom");
exit(1);
}
else
{ buf[numbytes] = '\0';
cout<<"c :"<<buf<<endl;
}

}
closesocket(sockfd);
return 0;
}

turbo_boy2006
جمعه 24 دی 1389, 16:38 عصر
دوستان کسی راهنمایی نمیکنه !!!:گریه:

rexi1r
جمعه 24 دی 1389, 18:16 عصر
سلام دوست عزیز من نمی تونم کمکت کنم ولی خ.دم نیاز به کمک دارم می خواستم بدونم که سوکت نویسی با ++c رو از کجا یاد گرفتی میتونی یه توضیحاتی درباره این نوع برنامه به من بدی اگه لطف کنی ممنون می شم.

turbo_boy2006
جمعه 24 دی 1389, 19:37 عصر
سلام

ما درسشو تو دانشگاه خوندیم ولی نه کامل و مفید من بیشتر از تو نت یاد گرفتم کتابهای خوبی هم هست یه سرچ کنی آموزش برنامه نویسی سوکت تو گوگل چیزای خوبی میاد

در کل من این طور متوجه شدم سوکت واسه ایجاد ارتباط بین دو پروسه سرور و کلاینت هست که از این طریق میتونید داده هایی رد و بدل کنید مثل نرم افزارهای چت.....

دوستان help me !!!!

tdkhakpur
جمعه 24 دی 1389, 21:53 عصر
دوستان کسی راهنمایی نمیکنه !!!:گریه:
کجاش مشکل دارید؟
اون بالا اشاره کردید که توی sendو recive داخل کلاینت و سرور مشکل دارید! در صورتی که هر دو طرف احتیاج به این دو تقاضا دارند هم ارسال و هم دریافت .
اگر مشکل ارسال دارید این میتونه به آدرس و یا نوع پروتکل انتخابی و دیگر چیزها ارتباط داشته باشه ویا میتونه به نوع دریافت شما بستگی داشته باشه که شما متوجه ارسال نمیشید.
ولی به نظرم در داخل کدهای کلاینت شما به سرور وصل نمیشید باید از connect استفاده کنید بعد شروع به ارسال نمایید.

turbo_boy2006
شنبه 25 دی 1389, 14:37 عصر
کجاش مشکل دارید؟
اون بالا اشاره کردید که توی sendو recive داخل کلاینت و سرور مشکل دارید! در صورتی که هر دو طرف احتیاج به این دو تقاضا دارند هم ارسال و هم دریافت .
اگر مشکل ارسال دارید این میتونه به آدرس و یا نوع پروتکل انتخابی و دیگر چیزها ارتباط داشته باشه ویا میتونه به نوع دریافت شما بستگی داشته باشه که شما متوجه ارسال نمیشید.
ولی به نظرم در داخل کدهای کلاینت شما به سرور وصل نمیشید باید از connect استفاده کنید بعد شروع به ارسال نمایید.
سلام....ممنون

اون udp هستا ! کانکت نمیخواد من در نوشتن توابع (ورودی هاش ) مشکل دارم....الآن اون برنامم توش فقط میتونم از کلاینت به سرور پیغام بدم برعکسش رو کدنویسیشو نمیدونم.

turbo_boy2006
دوشنبه 27 دی 1389, 11:06 صبح
دوستان یعنی کسی اینجا نمیدونه من سند و رسیو رو چی باید بنویسم !!!!