ZBLOG

#include #include #include #include #include using namespace std; int main() { int clientSocket = socket(AF_INET, SOCK_STREAM, 0); if(clientSocket < -1) { std::cerr

根据您提供的代码,出现bind()失败的原因可能是由于端口被占用或者权限不足。请确保选择一个未被占用的合法端口,并以管理员或特权用户身份运行程序。

此外,还有一处问题是在循环内部关闭了套接字clientSocket,导致每次发送和接收数据后都会立即关闭连接。建议将关闭操作移至循环结束之后,确保在退出程序前正确关闭套接字。

以下是修改后的代码:

#include <iostream>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>

using namespace std;

int main() {
    int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (clientSocket < -1) {
        cerr << "Failed to create socket." << endl;
        return 1;
    }

    struct sockaddr_in clientAddress{};
    clientAddress.sin_family = AF_INET;
    clientAddress.sin_addr.s_addr = INADDR_ANY;
    clientAddress.sin_port = htons(2048);

    if (bind(clientSocket, reinterpret_cast<const struct sockaddr*>(&clientAddress), sizeof(clientAddress)) != 0) {
        cerr << "Failed to bind address." << endl;
        close(clientSocket);
        return 1;
    }

    // 绑定远程地址
    sockaddr_in remoteAddr{};
    remoteAddr.sin_family = AF_INET;               // IPv4地址族
    remoteAddr.sin_port = htons(2048);            // 远程端口号(注意字节序转换)

    if (inet_pton(AF_INET, "192.168.17.132", &(remoteAddr.sin_addr)) <= 0) {
        cerr << "Invalid remote address" << endl;
        close(clientSocket);
        return -1;
    }

    if (connect(clientSocket, reinterpret_cast<const struct sockaddr*>(&remoteAddr), sizeof(remoteAddr)) < 0) {
        cerr << "Failed to connect address." << endl;
        close(clientSocket);
        return 1;
    }

    while (true) {
        char buff[1024] = {0};
        cout << "Enter string to send: ";
        cin >> buff;
        
        if (!strcmp(buff, "quit")) {
            break;
        }
        
        int len = send(clientSocket, buff, sizeof(buff), 0);
        
        if (len < 0) {
            cerr << "Failed to send" << endl;
            continue;
        }
        
        memset(buff, 0, sizeof(buff));
        
        len = recv(clientSocket, buff, sizeof(buff), 0);
        
        if (len < 0) {
            cerr << "Failed to receive" << endl;
            continue;
        }
        
        cout << "Received message: " << buff << endl;
    }

    close(clientSocket);

    return 0;
}

请注意,修改后的代码将根据您提供的远程IP地址进行连接,请确保该IP地址是正确的并且可以访问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=4172

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?