请高手帮我看看问题出在什么地方!我以下代码是用组播技术实现本地机向 用无线网卡上网的主机发信息,在局域网可以实现信息发送,但无法实现我所希望的要求。代码只上传了主要部分//发送端
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 1000);
IPEndPoint ipe2 = new IPEndPoint(IPAddress.Parse("224.168.100.2"), 2000);
socket.Bind(ipe);
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.168.100.2")));
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 100);
Console.WriteLine("等待连接");
try
{
string filename = @"e:\inter\mytest.txt";
FileStream fs = File.OpenRead(filename);
byte[] data = new byte[1024];
while (true)
{ while ((fs.Read(data, 0, data.Length) > 0))
{ socket.SendTo(data, ipe2); } }
}
catch (Exception e)
{
Console.WriteLine(e.Message);
} socket.Close();
}
//接收端
static void Main(string[] args)
{
Socket socket =new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Console.WriteLine("准备接收文件");
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 2000);
socket.Bind(ipe);
EndPoint ep = (EndPoint)ipe;
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.168.100.2")));
int sockopt = (int)socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
sockopt = (int)socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName. ReceiveTimeout);
Console.WriteLine("Timeout:{0}", sockopt);
byte[] data = new byte[1024];
while (true)
{
try
{
int recv = socket.ReceiveFrom(data, ref ep);
string stringdata = Encoding.Default.GetString(data, 0, recv);
Console.WriteLine("data received from;{0}", ep.ToString());
Console.Write(stringdata);
}
catch (SocketException)
{
Console.WriteLine("Error receiving message!");
//return;
} }
string welcome = "connect successfully!";
data = Encoding.Default.GetBytes(welcome);
socket.SendTo(data, data.Length,SocketFlags.None, ep);
socket.Close();
}
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 1000);
IPEndPoint ipe2 = new IPEndPoint(IPAddress.Parse("224.168.100.2"), 2000);
socket.Bind(ipe);
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.168.100.2")));
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 100);
Console.WriteLine("等待连接");
try
{
string filename = @"e:\inter\mytest.txt";
FileStream fs = File.OpenRead(filename);
byte[] data = new byte[1024];
while (true)
{ while ((fs.Read(data, 0, data.Length) > 0))
{ socket.SendTo(data, ipe2); } }
}
catch (Exception e)
{
Console.WriteLine(e.Message);
} socket.Close();
}
//接收端
static void Main(string[] args)
{
Socket socket =new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Console.WriteLine("准备接收文件");
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 2000);
socket.Bind(ipe);
EndPoint ep = (EndPoint)ipe;
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.168.100.2")));
int sockopt = (int)socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
sockopt = (int)socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName. ReceiveTimeout);
Console.WriteLine("Timeout:{0}", sockopt);
byte[] data = new byte[1024];
while (true)
{
try
{
int recv = socket.ReceiveFrom(data, ref ep);
string stringdata = Encoding.Default.GetString(data, 0, recv);
Console.WriteLine("data received from;{0}", ep.ToString());
Console.Write(stringdata);
}
catch (SocketException)
{
Console.WriteLine("Error receiving message!");
//return;
} }
string welcome = "connect successfully!";
data = Encoding.Default.GetBytes(welcome);
socket.SendTo(data, data.Length,SocketFlags.None, ep);
socket.Close();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货