0

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

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

4

1 回答 1

1

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

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

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

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

这是一个简单的例子,

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


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

简短的回答,除非你有服务器,否则很难做到

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

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

于 2013-05-24T13:10:37.340 回答