C#套接字服务器端口

时间:2009-10-07 16:24:14

标签: c# .net sockets network-programming

嘿,所以我正在尝试使用套接字构建一个简单的局域网游戏(不是tcpclient或tcplistener,是的,我知道它们是同一个东西)。我设法让聊天工作,现在我正试图让游戏工作。我在某处读到,管理游戏数据的最佳方式是通过服务器上的另一个端口(如果有人可以建议更好的方式,请随意这样做)。

我会尽可能地直截了当,所以我会发布一些代码片段,这样你就可以得到一般的想法。 (顺便说一下,我不是c#guru,这是我的第一个插座项目,所以请理解我的新生活)

服务器初始化如下:

sv = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
ip = new IPEndPoint(IPAddress.Parse(b.ToString()), 1000);
sv.Bind(ip);

(b是我的本地IP)

使用sv.SendTo()发送

消息;

现在我在客户端上:

svIp = new IPEndPoint(IPAddress.Parse(txtIp.Text.Trim()), 1000);

和一个侦听传入数据的线程(像这样smt):

rcv = sv.ReceiveFrom(data, ref svIp);

根据我的理解,客户端正在侦听服务器从端口1000发送给它的所有内容。我希望到目前为止我是对的,因为这就是聊天客户端似乎的工作方式。

好的,之后,我在服务器上创建了另一个绑定到端口1001的套接字服务器:

gameIp = new IPEndPoint(IPAddress.Parse(b.ToString()), 1001);

现在我想从新的套接字服务器发送消息,让我们称之为gameSv,所以我使用gameSv.SendTo()向客户端发送消息;根据我的理解发送,应该是来自端口1001的消息,客户端不应该接收该消息,因为他只是在侦听来自端口1000的数据。

好的,好到目前为止(我希望),在此之后我创建另一个线程,它侦听来自端口1001上的服务器的数据。所以现在当我从端口1001发送消息时,侦听端口1000的线程获取它,如果我发送另一条消息,另一个线程监听端口1001得到它而另一个没有,等等,它从一个到另一个。

知道为什么会发生这种情况以及如何解决这个问题? Thx提前。

2 个答案:

答案 0 :(得分:3)

听起来你的端口很混乱。您用来发送消息的端口无关紧要。 SendTo的第二个参数确定将消息发送到哪个端口。这必须匹配客户端正在侦听的端口。

答案 1 :(得分:1)

Socket只能接收针对套接字绑定的端口的消息。要使用Bind()方法执行此操作。

传递给ReceiveFrom()的IPEndPoint仅用于保存从中接收消息的远程地址。它来过滤从哪个端口/地址接收数据。