Я пытаюсь отправить файл по 4 байта за раз, если длина содержимого файла не делится на 4, я добавляю дополнительное пространство, а я отправляю егоrecv() переходит в бесконечный цикл
Когда я отправить некоторые строки он работает, но для некоторой строки RECV() собирается в бесконечный цикл
client.cpp
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
using namespace std;
int main(){
int ssock , csock ;
struct sockaddr_in server ;
server.sin_family = AF_INET ;
server.sin_port = htons(8088);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
ssock = socket (AF_INET,SOCK_STREAM,0);
if (ssock == -1) {
cout << " Error " ; return 0 ;
}
connect(ssock , (sockaddr *)&server ,sizeof(server));
/*void *buff ;
int len = recv(ssock , buff ,1024,0);
int *ptr = (int *)buff ;
cout << *ptr ;*/
void * buff ;
int len;
while(len = recv(ssock , buff ,4,0)){
cout<<(char *)buff<<len<<"\n";
}
return 0 ;
}
server.cpp
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fstream>
#include <cstring>
#include <unistd.h>
using namespace std;
int main(){
int ssock , csock ;
struct sockaddr_in server ;
server.sin_family = AF_INET ;
server.sin_port = htons(8088);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
ssock = socket (AF_INET,SOCK_STREAM,0);
if (ssock == -1) {
cout << " Error " ; return 0 ;
}
bind(ssock , (sockaddr *)&server ,sizeof(server));
listen(ssock,5);
socklen_t size = sizeof (server);
fstream fin("text.txt",ios::in);
string s((istreambuf_iterator<char>(fin)),istreambuf_iterator<char>());
fin.close();
//cout<<s;
int len = s.size();
if(len % 4 != 0) {
s.pop_back();
int i = len % 4 ;
i = 4 - i ;
while(i){s.push_back(' ');i--;}
s.push_back('\0');
}
cout<<s<<"\n"<<s.size()<<"\n";
while(csock = accept(ssock,(sockaddr *)&server ,&size)){
cout<<"\n Connection Accpeted \n" ;
/*int s = 172;
send(csock , (void *)&s, sizeof(s),0);*/
int i = 0;
i = 0 ;
while(i <= s.size()){
string temp =s.substr(i,4);
cout<<temp<<"\n";
cout<<send(csock,(void *)temp.c_str() ,4,0);
i+=4;
}
close(csock);
}
return 0 ;
}
Есть ли какие-либо проблемы при отправке или при получении, которые иногда застряли в этой точке.
Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [по теме] (http://stackoverflow.com/help/on-topic). См. [MCVE] (http://stackoverflow.com/help/mcve) о том, как довести свой вопрос до стандартов. – Prune