【发布时间】:2014-07-22 04:45:41
【问题描述】:
我正在尝试制作两个应用程序。一个将数据发送到特定的 udp 端口,另一个将读取它。
我有两个问题:
- 在同一台机器上运行时,我得到一个错误:“只有一个用法 每个套接字地址(协议/网络地址/端口)的通常是 允许“所以我需要弄清楚如果我不能测试它 同一端口上的多个套接字连接。
- 当我尝试使用 我网络中另一台计算机的内部 IP,我没有得到 任何阅读。
服务器:
private Socket sock;
private const int PORT = 5000;
public void start()
{
sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.ReceiveTimeout = 1;// seconds
sock.SendTimeout = 1;// seconds
IPEndPoint iep = new IPEndPoint(IPAddress.Any, PORT);
EndPoint ep = (EndPoint)iep;
sock.Bind(iep);
MulticastView view_obj = new MulticastView();
while(true)
{
try
{
if (sock.Connected)
{
sock.Send(Serializer.ObjectToByteArray(view_obj));
}
}catch(Exception ex){
Console.WriteLine(ex);
}
Thread.Sleep(1000); // milliseconds
}
}
客户:
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint iep = new IPEndPoint(ip, PORT);
EndPoint ep = (EndPoint)iep;
UdpClient client = new UdpClient(PORT);
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
// or using: Byte[] receiveBytes = client.Receive(ref ep);
Byte[] receiveBytes = client.Receive(ref RemoteIpEndPoint);
MulticastView view;
view = (MulticastView)Serializer.ByteArrayToObject(receiveBytes);
请注意,我需要单独的应用程序(在单独的进程上)。
【问题讨论】:
-
UDP 不是面向连接的。目前还不清楚你想要发生什么。请澄清。
-
你为什么要检查 sock.Connected?