I believe everything is in working order. The only problem I have with my code is that the server-side isn't getting all the information sent to the file that it is creating from the client-side.
This is using Winsock, by the way. Anybody here maybe know what's wrong with the file transfer process?
Client:
Code:
int main(){
WSADATA Winsock;
SOCKET Socket,Sub;
Addr addr;
IncomingAddress incomingAddress;
intAddressLen=sizeof(IncomingAddress);
WSAStartup(MAKEWORD(2,2),&Winsock);
if(LOBYTE(Winsock.wVersion)!=2|| HIBYTE(Winsock.wVersion)!=2){
WSACleanup();
return0;
}
Socket= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ZeroMemory(&addr,sizeof(Addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(6000);
if(connect(Socket,(sockaddr*)&addr,sizeof(Addr))<0){
printf("Connection Failed!\n");
getchar();
return0;
}
char*ClientIP= inet_ntoa(incomingAddress.sin_addr);
intClientPort= ntohs(incomingAddress.sin_port);
printf("Client connected!\n");
printf("IP: %s:%d\n",ClientIP,ClientPort);
printf("Sending file... \n");
FILE*File;
char*Buffer;
unsignedlongSize;
File= fopen("hey.txt","rb+");
if(!File){
printf("Error while reading the file!\n");
getchar();
return0;
}
fseek(File,0, SEEK_END);
Size= ftell(File);
fseek(File,0, SEEK_SET);
Buffer= malloc(Size);
fread(Buffer,Size,1,File);
char cSize[MAX_PATH];
sprintf(cSize,"%i",Size);
fclose(File);
send(Sub, cSize, MAX_PATH,0);// File size
intOffset=0;
while(Size>Offset){
intAmount= send(Sub,Buffer+Offset,Size-Offset,0);
if(Amount<=0){
printf("Error: "+WSAGetLastError());
break;
}else{
Offset+=Amount;
}
}
free(Buffer);
closesocket(Sub);
closesocket(Socket);
WSACleanup();
return0;
}
Server:
Code:
int main(){
WSADATA Winsock;
SOCKET Socket,Sub;
Addr addr;
IncomingAddress incomingAddress;
intAddressLen=sizeof(IncomingAddress);
// Start up Winsock
WSAStartup(MAKEWORD(2,2),&Winsock);
if(LOBYTE(Winsock.wVersion)!=2|| HIBYTE(Winsock.wVersion)!=2){
WSACleanup();
return0;
}
Socket= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// Memset alternative
ZeroMemory(&addr,sizeof(Addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(portNumber);
bind(Socket,(sockaddr*)&addr,sizeof(Addr));
if(listen(Socket,1)== SOCKET_ERROR){
printf("Listening error!\n");
}else{
printf("Listening...\n");
}
if(Sub= accept(Socket,(sockaddr*)&incomingAddress,&AddressLen)){
intSize;
char*Filesize= malloc(1024);
if(recv(Socket,Filesize,1024,0)){// File Size
Size= atoi((constchar*)Filesize);
printf("File size: %d\n",Size);
}
char*Buffer= malloc(Size);
intOffset=0;
while(Size>Offset){
intAmount= recv(Socket,Buffer+Offset,Size-Offset,0);
if(Amount<=0){
printf("Error: "+WSAGetLastError());
}else{
Offset+=Amount;
}
}
FILE*File;
File= fopen("test.txt","wb+");
fwrite(Buffer,1,Size,File);
fclose(File);
getchar();
closesocket(Socket);
WSACleanup();
}
}
return0;
}