C Linux UDP发送到";“地址不正确”;本地错误
我正在尝试用两个线程编写UDP 第一初始化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
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”注:管道不知道任何套接字。管道只是一个字节流,输入端用于写入管道,输出端用于读取管道。为了清楚起见,我建议删除“管道”工程的所有实例