/* Listner1.c çalışmıyor ve Listner2.c */kod yukarıdan 2 süreçleri ... yani listner1.exe ve listner2.exe yarattıkMulticasting
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#include <errno.h>
#include <Ws2tcpip.h>
#include <mswsock.h>
#define u_int32 UINT32
#pragma comment(lib,"ws2_32.lib") //Winsock Library
#define CPORT 12000
int main()
{
int iResult = 0;
WSADATA wsaData;
SOCKET RecvSocket;
struct sockaddr_in RecvAddr;
struct ip_mreq mreq;
char RecvBuf[1024];
int BufLen = 1024;
int yesopt = 1;
struct sockaddr_in SenderAddr;
int SenderAddrSize = sizeof (SenderAddr);
//-----------------------------------------------
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != NO_ERROR) {
wprintf(L"WSAStartup failed with error %d\n", iResult);
return 1;
}
//-----------------------------------------------
// Create a receiver socket to receive datagrams
RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (RecvSocket == INVALID_SOCKET) {
wprintf(L"socket failed with error %d\n", WSAGetLastError());
return 1;
}
//-----------------------------------------------
// Bind the socket to any address and the specified port.
if (setsockopt(RecvSocket,SOL_SOCKET, SO_REUSEADDR ,(char *) &yesopt ,sizeof(yesopt)) < 0) {
perror("Reusing ADDR failed");
exit(1);
}
memset(&RecvAddr,0,sizeof(RecvAddr));
RecvAddr.sin_family=AF_INET;
RecvAddr.sin_port=htons(CPORT);
RecvAddr.sin_addr.s_addr=inet_addr("192.168.0.104");
RecvBuf[0] = '\0';
mreq.imr_interface.s_addr = inet_addr("192.168.0.104");
mreq.imr_multiaddr.s_addr = inet_addr("235.0.0.0");
iResult = setsockopt(RecvSocket,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *) &mreq,sizeof(mreq));
if (iResult < 0) {
perror("membership");
exit(1);
}
iResult = bind(RecvSocket, (SOCKADDR *) & RecvAddr, sizeof (RecvAddr));
if (iResult != 0) {
wprintf(L"bind failed with error %d\n", WSAGetLastError());
return 1;
}
//-----------------------------------------------
// Call the recvfrom function to receive datagrams
// on the bound socket.
wprintf(L"Receiving datagrams...\n");
while(1) {
iResult = recvfrom(RecvSocket,
RecvBuf, BufLen, 0, (SOCKADDR *) &RecvAddr, &SenderAddrSize);
if(iResult <= 0) break;
RecvBuf[iResult] = '\0';
if (iResult == SOCKET_ERROR) {
wprintf(L"recvfrom failed with error %d\n", WSAGetLastError());
break;
}
puts(RecvBuf);
}
//-----------------------------------------------
iResult = closesocket(RecvSocket);
if (iResult == SOCKET_ERROR) {
wprintf(L"closesocket failed with error %d\n", WSAGetLastError());
return 1;
}
//-----------------------------------------------
// Clean up and exit.
// wprintf(L"Exiting.\n");
WSACleanup();
return 0;
}
...
mesajı .. Sender.c göndermek için kod aşağıdakive ...
#include<io.h>
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<winsock2.h>
#include <errno.h>
#include <Ws2tcpip.h>
#include <mswsock.h>
#define u_int32 UINT32
#pragma comment(lib,"ws2_32.lib") //Winsock Library
#define HELLO_PORT 12000
#define HELLO_GROUP "192.168.0.104"
main(int argc, char *argv[])
{
WSADATA wsa;
struct sockaddr_in addr;
int fd;
char message[2000];
int opt = 1;
int iResult = 0;
strcpy (message , argv[1]);
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Failed. Error Code : %d",WSAGetLastError());
return 1;
}
/* create what looks like an ordinary UDP socket */
if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) {
perror("socket");
exit(1);
}
/* set up destination address */
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr("192.168.0.104");
addr.sin_port=htons(HELLO_PORT);
if (sendto(fd,message,strlen(message),0,(struct sockaddr *) &addr,
sizeof(addr)) < 0) {
perror("sendto");
exit(1);
}
}
Ben 2 farklı komut pencereleri veçalıştırmak içinde listner1.exe ve listner2.exe çalıştırdığınızdaSender.exe "Merhaba" İleti, yalnızca tek bir işleme teslim edilir. İlk 'u başlatan işlem (örneğin - listner1.exe listner1.exe'den önce başlatılırsa, tüm iletiler yalnızca listene2'ye gönderilir. Listner2.exe aracından çıkıp listner1.exe'yi yeniden başlatırsam, listner1.exe'yi canlı tutuyorum, sonra yeni .. iletiler yalnızca listner1.exe teslim edilir
ben çok noktaya olmuyor neden bulmak mümkün değilim
Saygılar Sadanand
Çok teşekkürler ... Son 4 saat boyunca mücadele ediyordum ...... günümü kurtardınız/yaptınız! Şerefe! –