We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello,
do anyone have experience with BSD socket? I am using LPC1788. What i want to do is to receive a string or data from certain IpAddress with ist port. Example: I want to receive data only from IP: 239,127.0.1 Port 60001 and IP: 239,127.0.2 Port 60002. Look at the code example:
uint8_t uni_ip1[IP4_ADDR_LEN] = {192,168,50,73}; uint8_t mcast_ip1[IP4_ADDR_LEN] = {239,127,0,1}; uint8_t mcast_ip2[IP4_ADDR_LEN] = {239,127,0,2}; void bsd_thread(void const *arg) { SOCKADDR_IN addr; SOCKADDR_IN addr2; SOCKADDR_IN recaddr; int sock,res,addrlen; int sock2; int bind_status; int port_num=1001; char dbuf[200]; char sendebuf[10] = "HELLO"; sock = socket(AF_INET,SOCK_DGRAM,0); printf("sock_status = %i \n", sock); addr.sin_port = htons(port_num); addr.sin_family = PF_INET; addr.sin_addr.s_b1 = uni_ip1[0]; addr.sin_addr.s_b2 = uni_ip1[1]; addr.sin_addr.s_b3 = uni_ip1[2]; addr.sin_addr.s_b4 = uni_ip1[3]; bind_status = bind (sock, (SOCKADDR *)&addr, sizeof(addr)); printf("bind_status = %i \n", bind_status); //Here i start to bind multicast adress with port sock2 = socket(AF_INET,SOCK_DGRAM,0); printf("sock_status2 = %i \n", sock); addr2.sin_port = htons(60001); addr2.sin_family = PF_INET; addr2.sin_addr.s_b1 = mcast_ip1[0]; addr2.sin_addr.s_b2 = mcast_ip1[1]; addr2.sin_addr.s_b3 = mcast_ip1[2]; addr2.sin_addr.s_b4 = mcast_ip1[3]; bind_status = bind (sock2, (SOCKADDR *)&addr2, sizeof(addr2)); printf("bind_status2 = %i \n", bind_status); printf("addr2.sin_port = %i \r\n",ntohs(addr2.sin_port)); printf("addr2[%i . %i . %i . %i], \n",addr2.sin_addr.s_b1,addr2.sin_addr.s_b2,addr2.sin_addr.s_b3,addr2.sin_addr.s_b4); /*Here i join into 2 multicast adresse*/ igmp_join(0,mcast_ip1); igmp_join(0,mcast_ip2); while(1) { while(1) { addrlen = sizeof (addr); res = recvfrom (sock, dbuf, sizeof (dbuf), MSG_DONTWAIT , (SOCKADDR *)&recaddr, &addrlen); printf("recvfrom = %i \r\n", res); if(res >0 ) { printf("receive good \r\n"); printf("%s\n",dbuf); printf("recvfrom = %i \r\n", res); } res = sendto (sock, (char *)&sendebuf, strlen(sendebuf), 0, (SOCKADDR *)&addr, sizeof (addr)); printf("sendto = %i \r\n", res); if (res > 0) { printf("send good \r\n"); } osDelay (100); printf("\n"); break; } } } #define BSDTHREAD_STACKSIZE (1024) osThreadDef (bsd_thread, osPriorityNormal , 1, BSDTHREAD_STACKSIZE);
The Problem is, if i send data to mcast_ip1 port 60001, i get the data, and if i send to ,mcast_ip2 port 60001 I also get the data. Even i only Bind between mcast_ip1 and port 60001. Can anyone help how can i get the data only from mcast_ip1 port 60001 and mcast_ip2 port 60002. Thank you for helps
Best Regards
do anyone have experience with BSD socket? I am using LPC1788. What i want to do is to receive a string or data from certain IpAddress with its port. I want to receive data from two IP-Adress and Port-Number separately: IP: 239,127.0.1 Port 60001 IP: 239,127.0.2 Port 60002 Look at the code example:
to receive from both IP-Multicastaddress, i used the function: igmp_join(0,mcast_ip1); igmp_join(0,mcast_ip2);
The problem is, i receive data from both IP_adress with the port-Number 60001 and it doesn't matter which IP-Adress i used to send data.
Can anyone help how can i get the data only from specific IP-Adress and PORT-Number, Which the Data are sent to. Thank you for help