【发布时间】:2021-08-24 16:33:27
【问题描述】:
我正在尝试对 UDP 服务器和客户端进行编程。我尝试了代码,一切正常,但是当我尝试做同样的事情时,我的 VPS 作为服务器,我的计算机作为客户端,它不起作用。我在 upd 和 tcp 上打开了所有相关端口,但它仍然无法正常工作。谁能帮帮我?
Server:
public partial class Network
{
private UdpClient Socket { get; set; }
private IPEndPoint EpFrom = new IPEndPoint(IPAddress.Any, 0);
public void Bind(string address, int port)
{
this.Socket = new UdpClient(new IPEndPoint(IPAddress.Parse(address), port));
Receive();
}
public void Send(string text)
{
byte[] data = Encoding.ASCII.GetBytes(text);
Socket.Send(data, data.Length);
}
private void Receive()
{
Console.WriteLine("Hearing on localhost 11111");
byte[] data = Socket.Receive(ref EpFrom);
Console.WriteLine(Encoding.ASCII.GetString(data));
}
}
Call:
static void Main(string[] args)
{
// Server.Start();
Network server = new Network();
server.Bind("127.0.0.1", 11111);
}
Client:
public class Network
{
private UdpClient Socket { get; set; }
private IPEndPoint EpFrom = new IPEndPoint(IPAddress.Any, 0);
public void Server(string address, int port)
{
this.Socket = new UdpClient(new IPEndPoint(IPAddress.Parse(address), port));
Receive();
}
public void Client(string address, int port)
{
this.Socket = new UdpClient(port);
this.Socket.Connect(new IPEndPoint(IPAddress.Parse(address), port));
}
public void Send(string text)
{
byte[] data = Encoding.ASCII.GetBytes(text);
Socket.Send(data, data.Length);
Socket.Close();
}
private void Receive()
{
Console.WriteLine("Hearing on localhost 11111");
byte[] data = Socket.Receive(ref EpFrom);
Console.WriteLine(Encoding.ASCII.GetString(data));
}
}
Call:
static void Main(string[] args)
{
Network client = new Network();
client.Client("ADDRESS", 11111);
client.Send("test");
}
似乎连接没有从客户端断开,因为我的 vps 没有显示我和他之间的任何活动。 但不要相信。如果您有任何问题,请提出。
【问题讨论】:
-
您确定您提交的代码是实际代码吗?我看到
server.Bind("127.0.0.1", 11111)和client.Client("ADDRESS", 11111):第一个明确声明服务器将只侦听本地请求(不允许网络),我几乎看不到第二个如何工作(“地址”代表什么?)。跨度> -
许多 VPS 提供商会阻止所有端口上的外部流量,但选择的服务(如 SSH 或 HTTP/HTTPS)除外。有些甚至默认阻止这些。您可能需要明确允许 VPS 上指定端口上的连接。
-
"ADRESS" 只是一个占位符,因为我不希望每个人都能看到 IP。
-
致帕特里克:这可能是。你能告诉我如何启用这个端口吗?我已经在 ufw 中启用了它。