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 ......如果你發表您的評論作爲一個答案,我可以選擇它作爲回答。 –