18,356
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <winsock2.h>
#pragma comment( lib, "ws2_32.lib")
int main()
{
WSADATA wsadata;
SOCKET Socket, socket;
SOCKADDR_IN from, to;
WSAStartup( 0x0202, &wsadata );
printf("初始化完毕!\n");
Socket = WSASocket( AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_MULTIPOINT_D_LEAF|WSA_FLAG_MULTIPOINT_C_LEAF
|WSA_FLAG_OVERLAPPED);
if( !Socket )
{
printf( "创建socket失败: %d\n", WSAGetLastError() );
return 0;
}
printf("socket建立\n");
from.sin_family = AF_INET;
from.sin_port = htons( 1000 );
from.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
to.sin_family = AF_INET;
to.sin_port = htons( 4804 );
to.sin_addr.S_un.S_addr = inet_addr( "224.40.40.40" );
if( bind( Socket, (SOCKADDR*)&from, sizeof(from) ) == SOCKET_ERROR )
{
printf( "bind失败: %d\n", WSAGetLastError() );
return 0;
}
printf("bind完成\n");
if( ( socket = WSAJoinLeaf( Socket, (SOCKADDR*)&to,sizeof(to),NULL,NULL,NULL,NULL, JL_BOTH)) == SOCKET_ERROR )
{
printf("WSAJoinLeaf()失败: %d\n",WSAGetLastError());
closesocket(Socket);
WSACleanup();
return 0;
}
printf("joinleaf\n");
while( 1 )
{
char recvbuffer[100];
int value = 0;
int len = sizeof(to);
memset( recvbuffer, 0, 100);
value = recvfrom( socket, recvbuffer, 100, 0, (struct sockaddr*)&to, &len);
printf("value = %d\n",value);
printf( "%s\n", recvbuffer );
}
closesocket(Socket);
closesocket(socket);
WSACleanup();
return 0;
}
#include "stdafx.h"
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <Windows.h>
#include <stdlib.h>
#define BUFF_SIZE (1024*10)
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsad;
WSAStartup(MAKEWORD(1,1),&wsad);
SOCKET s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sockaddr_in local;
local.sin_family = AF_INET;
local.sin_addr.S_un.S_addr = INADDR_ANY;
local.sin_port = htons(10903);
memset(local.sin_zero,0,8);
bind(s,(sockaddr*)&local,sizeof(local));
ip_mreq mcast;
mcast.imr_interface.S_un.S_addr = INADDR_ANY;
mcast.imr_multiaddr.S_un.S_addr = inet_addr("230.0.1.2");
setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mcast,sizeof(mcast));
int loop = 0;
setsockopt(s,IPPROTO_IP,IP_MULTICAST_LOOP,(char*)&loop,sizeof(int));
char* recv_buf = (char*)malloc(BUFF_SIZE);
FILE* f = fopen("d:\\send.txt","r");
if (f == NULL)
{
printf("open file failed.\r\n");
return 0;
}
char* send_buf = (char*)malloc(BUFF_SIZE);
memset(send_buf,0,BUFF_SIZE);
int read_size = fread(send_buf,1,BUFF_SIZE,f);
sockaddr_in remote;
remote.sin_addr.S_un.S_addr = inet_addr("230.0.1.2");
remote.sin_family = AF_INET;
remote.sin_port = htons(10903);
memset(remote.sin_zero,0,8);
sendto(s,send_buf,read_size,0,(sockaddr*)&remote,sizeof(remote));
while(1)
{
memset(recv_buf,0,BUFF_SIZE);
sockaddr_in from;
int fromlen = sizeof(from);
int rt = recvfrom(s,recv_buf,BUFF_SIZE,0,(sockaddr*)&from,&fromlen);
if (rt > 0)
{
printf("recv : \r\n");
printf("%s\r\n\r\n",recv_buf);
printf("total %d bytes.Received %d bytes.\r\n",rt,strlen(recv_buf));
}
else
{
closesocket(s);
s = -1;
break;
}
}
return 0;
}