簡體   English   中英

通過TCP套接字發送數據時出現錯誤的文件描述符錯誤

[英]Bad file descriptor error while sending data through tcp socket

我想創建數據,然后發送到server 在添加新傳感器(每個傳感器是一個新網絡)並通過client.cpp發送之后,應該在Network.cpp創建來自每個傳感器的信息數據,並使用client.cpp發送,我使用繼承將Network類的功能添加到client類,反之亦然需要幫助才能在我的程序工作中正確使用功能。 當我運行程序時,出現此錯誤:

連接失敗。 錯誤:錯誤的文件描述符

我想念什么?

Network.h:

class Network :public client{
public:
    Network();
    void add(Sensor new_sensor);
    virtual ~Network();
private:
    vector<Sensor> sensors;
}

Network.cpp:

void Network::add(const client &a,Sensor new_sensor) {
    sensors.push_back(new_sensor);
    unsigned int Header[2] = {0xe1,0xe2};
    uint16_t u16;
    u16 = htons(Header[2]);
    memcpy(packet + 0, &u16, 2);
    unsigned int SensorSn[4] = { 0x1e, 0x25, 0x71, 0x80 };
    uint32_t u32;
    u32 = htons(SensorSn[4]);
    memcpy(packet + 2, &u32, 4);
    uint32_t a32;
    unsigned int SensorTemp[4] = { 0x00, 0x00, 0x00, 0x23 };
    a32 = htons(SensorTemp[4]);
    memcpy(packet + 6, &a32, 4);
        a.send_data();
}

client.h:

class client {
public:
    client();
    void conn(string, int);
    void send_data() const;
    string receive(int);
    virtual ~client();
private:
    int sock;
    struct sockaddr_in server_addr;
protected:
    char packet[10];
};

} 

client.cpp:

void client::conn(string address, int port) {
    //create socket if it is not already created
    if (sock == -1) {
        //Create socket
        sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock == -1) {
            perror("Could not create socket");
        }

        cout << "Socket created\n" << endl;  //doesn't show this line!!!
    }
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(1234);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    while(1){
    int m=connect(sock, (struct sockaddr *) &server_addr, sizeof(server_addr));
    if (m==-1){
        perror("connect failed. Error");       
        continue;
    }
    }
    cout << "Connected\n";  //doesn't show this line!!!
    close(sock);


}
void client::send_data()const {
    int n=send(sock, packet, sizeof(packet), 0)  ;
if (n==-1){
    perror("send failed. Error");  ///my program stop in this line
            exit(1);

}
    cout << "Data send"<<endl;

    close(sock);
}

您還記得在構造函數中將sock初始化為-1嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM