C Linux UDP发送到";“地址不正确”;本地错误

C Linux UDP发送到";“地址不正确”;本地错误,c,linux,udp,C,Linux,Udp,我正在尝试用两个线程编写UDP 第一初始化UDP套接字 int fdPipe[2]; //for sockets if ((fdPipe[0] = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("cannot create socket"); assert(NULL); } struct sockaddr_in readAddr; memset((char *)&readAddr, 0, sizeof(read

我正在尝试用两个线程编写UDP

第一初始化UDP套接字

int fdPipe[2];    //for sockets

if ((fdPipe[0] = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
    perror("cannot create socket");
    assert(NULL);
}

struct sockaddr_in readAddr;
memset((char *)&readAddr, 0, sizeof(readAddr));
readAddr.sin_family = AF_INET;
readAddr.sin_addr.s_addr = htonl(INADDR_ANY);
readAddr.sin_port = htons(10000);


if (bind(fdPipe[0], (struct sockaddr *)&readAddr, sizeof(readAddr)) < 0) {
    perror("bind failed");
    assert(NULL);
}

if ((fdPipe[1] = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
    perror("cannot create socket");
    assert(NULL);
}
struct sockaddr_in writeAddr;
memset((char *)&writeAddr, 0, sizeof(writeAddr));
writeAddr.sin_family = AF_INET;
writeAddr.sin_addr.s_addr = htonl(INADDR_ANY);
writeAddr.sin_port = htons(10101);

if (bind(fdPipe[1], (struct sockaddr *)&writeAddr, sizeof(writeAddr)) < 0) {
    perror("bind failed");
    assert(NULL);
}
然后运行另一个线程来相互通信

但是当我使用
servAddr
fdPipe[1]
调用sentto到
fdPipe[0]
时,会出现错误的地址错误。 事件当我通过打印检查地址和端口号时,它似乎是正确的,如
IP:127.0.0.1端口:10000

char event = '1'
std::cout << "port: " << ntohs(servAddr.sin_port) << std::endl;
std::cout << "IP: "  << inet_ntoa(servAddr.sin_addr) << std::endl;
sendto(fdPipe[1], (const char*)(event), 1, 0,(struct sockaddr *)&servAddr,sizeof(servAddr));
char事件='1'

std::cout您正在将
事件
从一个字符转换为一个指针,而不是获取事件的地址,这可能是您想要做的

您的sendto行应该类似于

sendto(fdPipe[1], &event, 1, 0,(struct sockaddr *)&servAddr,sizeof(servAddr));

提示是启用编译器中的所有警告,这可能会捕获可疑的强制转换。

您正在将
事件
从字符强制转换为指针,而不是获取事件的地址,这可能是您想要做的

您的sendto行应该类似于

sendto(fdPipe[1], &event, 1, 0,(struct sockaddr *)&servAddr,sizeof(servAddr));

提示是启用编译器中的所有警告,这可能会捕获可疑的强制转换。

您正在将
事件
从字符强制转换为指针,而不是获取事件的地址,这可能是您想要做的

您的sendto行应该类似于

sendto(fdPipe[1], &event, 1, 0,(struct sockaddr *)&servAddr,sizeof(servAddr));

提示是启用编译器中的所有警告,这可能会捕获可疑的强制转换。

您正在将
事件
从字符强制转换为指针,而不是获取事件的地址,这可能是您想要做的

您的sendto行应该类似于

sendto(fdPipe[1], &event, 1, 0,(struct sockaddr *)&servAddr,sizeof(servAddr));

提示是启用编译器中的所有警告,这可能会捕获可疑的强制转换。

事件包含/指向什么?抱歉,事件只是任何1字节的值,我将其用作“1”。注意:管道不知道任何套接字。管道只是一个字节流,输入端用于写入管道,输出端用于读取管道。为了清楚起见,我建议删除工作“pipe”的所有实例
事件包含/指向什么?对不起,事件只是任何1字节的值,我将其用作“1”注:管道不知道任何套接字。管道只是一个字节流,输入端用于写入管道,输出端用于读取管道。为了清楚起见,我建议删除工作“pipe”的所有实例
事件包含/指向什么?对不起,事件只是任何1字节的值,我将其用作“1”注:管道不知道任何套接字。管道只是一个字节流,输入端用于写入管道,输出端用于读取管道。为了清楚起见,我建议删除工作“pipe”的所有实例
事件包含/指向什么?对不起,事件只是任何1字节的值,我将其用作“1”注:管道不知道任何套接字。管道只是一个字节流,输入端用于写入管道,输出端用于读取管道。为了清楚起见,我建议删除“管道”工程的所有实例