Socket operation on non-socket

1. Socket operation on non-socket

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/10/2017 - 11:55h

Estou apredendo a programar sockets porém estou tendo problemas na hora de realizar a troca de menssagens entre o cliente e o servidor, os dois códigos funcionam como "deveriam" só que o problema está na hora de enviar uma menssagem e receber.


Cliente.cpp

#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <iostream>
#include <errno.h>

struct sockaddr_in server;

#define buffer 200

int main(){

std::string menssagm;

int clientfd=(socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));

if(clientfd==-1){
perror("socket");
std::cout << "Falha\n";
}else{
std::cout << "Ok...\n";
}

server.sin_family=AF_INET;
server.sin_port=htons(2000);
//server.sin_addr.s_addr=inet_addr("127.0.0.1");

int serverfd=(connect(clientfd, (struct sockaddr*)&server, sizeof(server)));

if(serverfd==-1){
std::cout << "Erro...\n";
perror("connect");
}else{
std::cout << "Conexão estabelecida com sucesso\n";

if((recv(serverfd,(void*)menssagm.c_str(), buffer, 0)==-1)){
std::cout << "Erro ao receber menssagem\n";
perror("recv");
}else{
std::cout << "Menssagem recebida\n";
std::cout << menssagm << "\n";
}

if((send(serverfd, "script kiddie", buffer, 0)==-1)){
std::cout << "Erro ao enviar menssagem\n";
perror("send");
}else{
std::cout << "Menssagem enviada";
}

}

}


Server.cpp

#include <iostream>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>

struct sockaddr_in local;
struct sockaddr_in remoto;

std::string hello="Hello";
std::string word;

int main(){

int localFd=((socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)));

local.sin_family=AF_INET;
local.sin_port=htons(2000);
local.sin_addr.s_addr = inet_addr("127.0.0.1");

bind(localFd,(struct sockaddr*)&local, sizeof(local));

listen(localFd,1);

int remotoFd;
socklen_t len=sizeof(remoto);

if((remotoFd=accept(localFd, (struct sockaddr*)&remoto, &len))==-1){
std::cout << "Erro...\n";
}else{
std::cout << "Conexão recebida com sucesso\n";
send(remotoFd, hello.c_str(), 50, 0);
recv(remotoFd, (void*)word.c_str(), 50, 0);

std::cout << word << "\n";
}
}


O retorno da função perror é:
recv(): Socket operation on non-socket
send(): Socket operation on non-socket



  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts