在线多人游戏发送/接收信息

时间:2013-05-23 23:45:51

标签: vb.net client-server tcpclient udpclient

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

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

1 个答案:

答案 0 :(得分: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


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

回答,除非你有服务器,否则不可能非常非常困难。

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

我可以继续解释如何设置其他程序等等,但是判断你的网络编程技能仍在“展开翅膀”,我建议你省略这样的高级功能,直到你有更多的经验,然后当你更自信地亲自尝试,如果你还在苦苦挣扎只是在这里提出一个问题,我相信有人会帮助你。