C#套接字服务器端口

C#套接字服务器端口

问题描述:

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

我将尽可能直接,所以我会张贴一些代码片段,以便您可以得到一般想法。 (顺便说一句,我不是C#大师,这是我的第一个插槽的项目,所以请大家理解我的newbiness)

服务器初始化这样的:

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); 

现在我想从一个新的socket服务器发送一条消息,让我们把它gameSv,所以我使用gameSv.SendTo()向客户端发送消息;根据我的理解,应该从端口1001发送一条消息,客户端不应该能够接收这条消息,因为他只是在监听来自端口1000的数据。

好吧,到目前为止(我希望),在此之后,我创建了另一个线程,它监听端口1001上来自服务器的数据。因此,现在,当我从端口1001发送消息时,侦听端口1000的线程获取它,比发送另一个消息的另一线程正在侦听端口1001得到它,另一端不能,等等,它从一个到另一个。

任何想法为什么发生这种情况,以及如何解决它? Thx提前。

+1

你没有使用WCF的任何原因? – Will 2009-10-07 16:38:13

+0

Tbh我不知道WCF是什么,我搜索谷歌,似乎很有趣,但我还没有知识使用它。我猜想我会做更多的阅读。无论如何,建议Thx,我会研究它。 – Bogdan 2009-10-07 16:47:47

这听起来像你混淆了你的端口。您用来发送消息的端口并不重要。 SendTo的第二个参数确定消息发送到哪个端口。这必须匹配客户端正在监听的端口。

+0

谢谢你的回答,我现在明白我哪里出错了。 – Bogdan 2009-10-07 16:56:08

套接字只能接收定位到套接字绑定端口的消息。用Bind()方法做到这一点。

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

+0

谢谢,我想我太累了,不能直接思考,我知道ReceiveFrom使用EndPoint来存储远程地址,但我忘了。无论如何谢谢你提醒我:) – Bogdan 2009-10-07 16:58:24