hanita
پنج شنبه 28 آبان 1394, 10:55 صبح
سلام دوستان من یه برنامه ی کلاینت سرور ساده نوشتم که کلاینت پیام ها رو ار سال میکنه سرور اونارو میگیره و همونا رو بر میگردونه
ولی الان برنامه اجرا نمیشه و وقتی دیباگ میکنم مقدار تابع send مقدار 1- برمیگردونه میشه کمکم کنید.
تو محیط QT کار میکنم.
server code:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<winsock2.h>
#include<fstream>
#include<sys/types.h>
#ifdef__WIN32__
#include<winsock2.h>
#else
#include<sys/socket.h>
#endif
#ifdef__WIN32__
#include<winsock2.h>
#else
#include<netinet/in.h>
#endif
intmain(){
WORDwVersionRequested;
WSADATAwsaData;
SOCKETintSocket,intRSocket;
structsockaddr_inrecServer,recClient,recSin;
intintErr,intLen;
char*charbuffer;
wVersionRequested=MAKEWORD(2,0);
if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
printf("Erroroninitializing");
exit(1);
}
recServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
recServer.sin_family=AF_INET;
recServer.sin_port=htons(3666);
intSocket=socket(AF_INET,SOCK_STREAM,0);
if(intSocket==-1){
printf("\n::ErrorOnCreateSocket::%d\n",errno);
perror("socket");
exit(1);
}
intErr=bind(intSocket,(structsockaddr*)&recServer,sizeof(recServer));
if(intErr==-1){
printf("\n::ErrorOntheCallbindFunction::\n");
exit(1);
}
else{
printf("Waitingforincomingconnection");}
for(;;)
{
intErr=listen(intSocket,SOMAXCONN);
if(intSocket==-1){
printf("\n::ErrorOntheCalllistenFunction::\n");
exit(1);
}
intLen=sizeof(recClient);
intErr=accept(intSocket,(structsockaddr*)&recClient,&intLen);
if(intRSocket==-1){
printf("\n::ErrorOnConnection::\n");
exit(1);
}
intsize=sizeof(recSin);
intErr=recvfrom(intSocket,charbuffer,sizeof(charbu ffer),0,(structsockaddr*)&recSin,&size);
if(intErr==-1){
printf("\n::ErrorOnRecevData::\n");
exit(1);
}
while(intMessage=recvfrom(intSocket,charbuffer,siz eof(charbuffer),0,(structsockaddr*)&recSin,&size))
{
Message=recvfrom(intSocket,charbuffer,sizeof(charb uffer),0,(structsockaddr*)&recSin,&size);
Message=send(intRSocket,charbuffer,strlen(charbuff er),0);
}
std::ofstreamoutput_file("RecievedData.txt",std::ios::out);
if(!output_file)
{
printf("filecannotopen");
exit(1);
}
else
{
output_file<<charbuffer;
}
return0;
}
}
client code:
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #ifdef __WIN32__ # include <winsock2.h> #else # include <sys/socket.h> #endif #ifdef __WIN32__ # include <winsock2.h> #else #include <netinet/in.h> #endif
int main(){ WORD wVersionRequested; WSADATA wsaData; SOCKET intSocket; struct sockaddr_in recSin; int intErr; char *charbuffer;
wVersionRequested=MAKEWORD(2,0); if(WSAStartup(wVersionRequested,&wsaData)!=0) { printf("Error on initializing"); exit(1); }
recSin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); recSin.sin_family=AF_INET; recSin.sin_port=htons(3666);
intSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(intSocket == (unsigned)-1){ printf("\n::Error On Create Socket:: %d \n", intSocket ); perror("socket"); exit(1); }
intErr=connect(intSocket,(struct sockaddr *)&recSin,sizeof(recSin)); if(intErr==-1){ printf("\n::Error On connecting::\n");
exit(1); }
charbuffer=(char *)"HELLO\0"; intErr=send(intSocket,charbuffer,strlen(charbuffer ),0); if(intErr==-1) { printf("\n::Error On Send Data::\n"); exit(1); } memset(charbuffer,0,strlen(charbuffer));
int size=sizeof(recSin); intErr=recvfrom(intSocket,charbuffer,sizeof(charbu ffer),0,(struct sockaddr *)&recSin,&size); if(intErr==-1){ printf("\n::Error On Recev Data::\n"); exit(1); } printf("Recived Data,pchrBuffer"); closesocket(intSocket); }
ولی الان برنامه اجرا نمیشه و وقتی دیباگ میکنم مقدار تابع send مقدار 1- برمیگردونه میشه کمکم کنید.
تو محیط QT کار میکنم.
server code:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<winsock2.h>
#include<fstream>
#include<sys/types.h>
#ifdef__WIN32__
#include<winsock2.h>
#else
#include<sys/socket.h>
#endif
#ifdef__WIN32__
#include<winsock2.h>
#else
#include<netinet/in.h>
#endif
intmain(){
WORDwVersionRequested;
WSADATAwsaData;
SOCKETintSocket,intRSocket;
structsockaddr_inrecServer,recClient,recSin;
intintErr,intLen;
char*charbuffer;
wVersionRequested=MAKEWORD(2,0);
if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
printf("Erroroninitializing");
exit(1);
}
recServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
recServer.sin_family=AF_INET;
recServer.sin_port=htons(3666);
intSocket=socket(AF_INET,SOCK_STREAM,0);
if(intSocket==-1){
printf("\n::ErrorOnCreateSocket::%d\n",errno);
perror("socket");
exit(1);
}
intErr=bind(intSocket,(structsockaddr*)&recServer,sizeof(recServer));
if(intErr==-1){
printf("\n::ErrorOntheCallbindFunction::\n");
exit(1);
}
else{
printf("Waitingforincomingconnection");}
for(;;)
{
intErr=listen(intSocket,SOMAXCONN);
if(intSocket==-1){
printf("\n::ErrorOntheCalllistenFunction::\n");
exit(1);
}
intLen=sizeof(recClient);
intErr=accept(intSocket,(structsockaddr*)&recClient,&intLen);
if(intRSocket==-1){
printf("\n::ErrorOnConnection::\n");
exit(1);
}
intsize=sizeof(recSin);
intErr=recvfrom(intSocket,charbuffer,sizeof(charbu ffer),0,(structsockaddr*)&recSin,&size);
if(intErr==-1){
printf("\n::ErrorOnRecevData::\n");
exit(1);
}
while(intMessage=recvfrom(intSocket,charbuffer,siz eof(charbuffer),0,(structsockaddr*)&recSin,&size))
{
Message=recvfrom(intSocket,charbuffer,sizeof(charb uffer),0,(structsockaddr*)&recSin,&size);
Message=send(intRSocket,charbuffer,strlen(charbuff er),0);
}
std::ofstreamoutput_file("RecievedData.txt",std::ios::out);
if(!output_file)
{
printf("filecannotopen");
exit(1);
}
else
{
output_file<<charbuffer;
}
return0;
}
}
client code:
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #ifdef __WIN32__ # include <winsock2.h> #else # include <sys/socket.h> #endif #ifdef __WIN32__ # include <winsock2.h> #else #include <netinet/in.h> #endif
int main(){ WORD wVersionRequested; WSADATA wsaData; SOCKET intSocket; struct sockaddr_in recSin; int intErr; char *charbuffer;
wVersionRequested=MAKEWORD(2,0); if(WSAStartup(wVersionRequested,&wsaData)!=0) { printf("Error on initializing"); exit(1); }
recSin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); recSin.sin_family=AF_INET; recSin.sin_port=htons(3666);
intSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(intSocket == (unsigned)-1){ printf("\n::Error On Create Socket:: %d \n", intSocket ); perror("socket"); exit(1); }
intErr=connect(intSocket,(struct sockaddr *)&recSin,sizeof(recSin)); if(intErr==-1){ printf("\n::Error On connecting::\n");
exit(1); }
charbuffer=(char *)"HELLO\0"; intErr=send(intSocket,charbuffer,strlen(charbuffer ),0); if(intErr==-1) { printf("\n::Error On Send Data::\n"); exit(1); } memset(charbuffer,0,strlen(charbuffer));
int size=sizeof(recSin); intErr=recvfrom(intSocket,charbuffer,sizeof(charbu ffer),0,(struct sockaddr *)&recSin,&size); if(intErr==-1){ printf("\n::Error On Recev Data::\n"); exit(1); } printf("Recived Data,pchrBuffer"); closesocket(intSocket); }