0
struct sockaddr_in addrSenderOfVideo
struct sockaddr_in client_addr; // Client Internet address
char* buffer = new char[2];
int sizeOfBuffer=1050;
int clientfd;
char* bufferWithPacketData = new char[sizeOfBuffer];
extern int client_s; // Client socket
if (client_s < 0)
{
printf("*** ERROR - socket() failed \n");
}
//Client address.
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP address to use
client_addr.sin_port = htons(portNumClient);
clientfd = bind(client_s,(const sockaddr*) &client_addr, sizeof(client_addr));
fprintf (stderr, "inside of listen for new packet<; clientfd is %d",clientfd);
if (clientfd < 0)
{
fprintf (stderr, "WARNING -1 doing BIND!");
}
int n = recvfrom (client_s, bufferWithPacketData, sizeOfBuffer, 0,(struct sockaddr*)&addrSenderOfVideo, &fromlen);
retcode = sendto(client_s, buffer, symbol_size, 0,
(struct sockaddr *)&addrSenderOfVideo, sizeof(addrSenderOfVideo));
当sendto被调用时,错误'9errno是不良地址'被打印出来。 这是什么原因以及如何解决这个问题?发送到sockaddr的'不良地址'*由recvfrom检索
的数据从在功能recvfrom的发送方接收到的,和addrSenderOfVideo
包含一个端口和IP号码。 发件人拥有IP“127.0.0.1”,这也是包含在addrSenderOfVideo
IP地址。
有sendto'的'两个参数是指向用户空间缓冲器,因此可以触发'EFAULT':数据缓冲器和地址。地址指向一个固定大小的局部变量,所以它似乎不是罪魁祸首。所以它一定是数据缓冲区。数据缓冲区指向一个大小为2的数组。您没有向我们展示如何初始化'symbol_size'。 symbol_size是否大于2? – Celada
@Celada, 非常感谢!是的,在重复使用代码时,我犯了忘记使用其他大小而不是'symbol_size'的错误。当我改变这个大小时,它现在正在工作。 我一直在寻找放错了地方的bug ......如果你发表您的评论作为一个答案,我可以选择它作为回答。 –