【问题标题】:Online Multiplayer Game Send/Receive Information在线多人游戏发送/接收信息
【发布时间】:2014-06-23 19:38:15
【问题描述】:

我在 vb.net 中编写扑克游戏,我想使用互联网创建多人游戏,无论是在 WAN 还是 LAN 上。我真的不知道从哪里开始,也不知道在 Google 上搜索什么。我知道我将不得不监听一个端口,并且我需要发送和接收数据包。 Google 上的任何搜索都没有帮助。任何链接/想法?

另外,我如何能够显示当前正在进行的所有游戏的列表框并允许用户加入?以及如何创建新游戏?

【问题讨论】:

  • 从学习如何使用 TcpClient 和 TcpListener 开始。网上有很多例子。首先为 LAN 开发,因为它可以简化事情......

标签: vb.net client-server tcpclient udpclient


【解决方案1】:

我建议学习UdpClient class,对于初学者来说这是一个不错的选择。

您首先要“设置”两个客户端,一个用于发送数据,一个用于侦听传入数据。一旦您为客户端分配了适当的地址和端口号,您就可以循环启动侦听客户端,这样您就可以始终如一地侦听数据。

然后您将发送客户端“连接”到某种形式的触发器(在下面给出的示例中,我已将发送客户端设置为按钮事件),这样您就可以不定期地发送数据,或者您可以将您的客户端设置为循环连续发送数据。

完成此操作后,您现在需要将要发送的数据从字符串转换为字节数组,然后您最终可以发送它,反之亦然接收数据(来自字节数组到字符串)。

这是一个简单的例子,

Imports System.Net.Sockets
Imports System.Threading
Imports System.Text
Imports System.Net

Public Class Form1

    Private Const port As Integer = 9653 'Or whatever port number you want to use
    Private Const broadcastAddress As String = "255.255.255.255"
    Private receivingClient As UdpClient
    Private sendingClient As UdpClient

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        InitializeSender()
        InitializeReceiver()
    End Sub

    Private Sub InitializeSender()
        sendingClient = New UdpClient(broadcastAddress, port) 'Use broadcastAddress for sending data locally (on LAN), otherwise you'll need the public (or global) IP address of the machine that you want to send your data to
        sendingClient.EnableBroadcast = True
    End Sub

    Private Sub InitializeReceiver()
        receivingClient = New UdpClient(port)
        ThreadPool.QueueUserWorkItem(AddressOf Receiver) 'Start listener on another thread
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim stringToSend As String = TextBox1.Text 'Assuming you have a textbox with the data you want to send
        If (Not String.IsNullOrEmpty(stringToSend)) Then
            Dim data() As Byte = Encoding.ASCII.GetBytes(stringToSend)
            sendingClient.Send(data, data.Length)
        End If
    End Sub

    Private Sub Receiver()
        Dim endPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, port) 'Listen for incoming data from any IP on the specified port
        Do While True 'Notice that i've setup an infinite loop to continually listen for incoming data
            Dim data() As Byte
            data = receivingClient.Receive(endPoint)
            Dim message As String = Encoding.ASCII.GetString(data) 'Recived data as string
        Loop
    End Sub
End Class


现在为可用游戏添加一个列表框。

简短回答,除非你有服务器,否则不可能非常非常难以做到。

更长的答案,你需要一个服务器,假设你有一个服务器,你需要创建一个额外的程序来处理发送给它的数据,并将数据发送到其他用户。

我可以继续解释如何设置附加程序等,但判断您的网络编程技能仍在“展开翅膀”,我建议您在掌握这些高级功能之前不要使用更多经验,然后当您更有信心时,自己尝试一下,如果您仍在苦苦挣扎,请在这里提出问题,我相信有人会帮助您。

【讨论】:

  • 好的,我可以指定一个 IP 地址,以便用户可以和他的朋友一起加入游戏吗?顺便说一句,感谢您提供的出色代码..
  • 是的,(公共)IP 地址将属于您的服务器。欢迎您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2017-12-09
相关资源
最近更新 更多