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;
}
دوستان اگه میشه کمک کنید من اینو تا اینجا با ++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;
}