【发布时间】:2017-12-24 15:41:33
【问题描述】:
我正在尝试通过 UDP 端口接收和发送数据。它与 TCP 配合得很好,但是当我将其更改为 UDP 时,它会损坏。
这是我仅用于接收的 UDP 代码:
Socket receiver_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.11.254"), 11000);
.
.
.
public Form1()
{
InitializeComponent();
receiver_socket.Connect(ipep);
}
private void Receive_socket_delegate()
{
receiver_socket.BeginReceive(r_buff, 0, r_buff.Length, SocketFlags.None, new AsyncCallback(socket_receive_data), receiver_socket);
}
void socket_receive_data(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
if (recv > 0)
{...
}
}
怎么了?
【问题讨论】:
-
你不需要用UDP中的方法连接。你有什么问题请详细解释。
-
TCP 端口存在一个严重问题,迫使我改用 UDP。在 TCP 的情况下,如果你的数据超过了数据包的容量,它会不停地发送数据,所以其中会有一些不正确的数据。但是,这个问题不在 UDP 中。我的意思是如果某些数据超过了数据包的容量,它将忽略额外的数据。所以我想用它
-
它适合你吗?
-
“TCP 端口有一个可怕的问题”——不,没有。 “会有一些不正确的数据” -- 不,不会有。您需要接受这样一个事实,即如果您在使用 TCP 时获得了不正确的数据,那么错误就在 您的 代码中,而不是在 TCP 中。至于您的问题,如果没有可靠地重现问题的良好minimal reproducible example,就无法回答。即使有一个,最可能的答案是您有网络配置问题。