Jump to content

29 posts in this topic

Posted

In class we made a simple tictactoe game in vb.net but I wanna try to go the extra mile and make it playable over the network.... I know alot about tcp/ip like I would need to pick one of the computers to host it with a port a number then one of the programs need to be the client and connect to that server.... I remember teaching myself on how to make a simple chat program in vb6 using the winsock ocx but how would I do it in vb.net?

Share this post


Link to post
Share on other sites

Posted

Check out the MSDN docs on TcpClient/TcpListener. They're quite useful. If you want something more full-featured that's already designed check out [url="http://code.google.com/p/lidgren-network-gen3/"]Lidgren[/url].
1 person likes this

Share this post


Link to post
Share on other sites

Posted

http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx#Y0 so how do I use this code? Where do I put it all? I obviously dont put it all in a command button....

Share this post


Link to post
Share on other sites

Posted

No, you could start your TcpListener on the OnLoad() method of the main form. That said, if you're just starting out programming, adding TCP/IP multiplayer to your Tic-Tac-Toe is probably beyond your abilities at the moment. You'll need to define a message format, serialize/deserialize your messages through the connection, ensure synchronisation of all clients, handle disconnects and re-connects gracefully etc. It's not trivial.

Share this post


Link to post
Share on other sites

Posted

[quote name='Dr_Asik' timestamp='1351292673' post='595275419']
No, you could start your TcpListener on the OnLoad() method of the main form. That said, if you're just starting out programming, adding TCP/IP multiplayer to your Tic-Tac-Toe is probably beyond your abilities at the moment. You'll need to define a message format, serialize/deserialize your messages through the connection, ensure synchronisation of all clients, handle disconnects and re-connects gracefully etc. It's not trivial.
[/quote]

copy and paste it onload and it dont work and the message part is easy just alot of ifs "if client sends "X:1"" Put an x mark on button 1 so on.....

Share this post


Link to post
Share on other sites

Posted

[quote name='togermano' timestamp='1351334267' post='595276401']
copy and paste it onload and it dont work and the message part is easy just alot of ifs "if client sends "X:1"" Put an x mark on button 1 so on.....
[/quote]How does it not work? What do you expect it to do? Do you have a client as well? A listener is just that, a listener, it listens to incoming connections. You need one instance of your app that acts as the server and one (or multiple others) that act as the client. There's a link to an example TcpClient in that same tutorial page for TcpListener. Read up on tcp connections, how to establish a connection, how to pass messages around, how to close the connection.

"A lot of ifs" is a terrible way of going about this btw. What would you do for a 10x10 tic-tac-toe? Code 100 if-elses? What if you wanted to support multiple different sizes? If you don't know about lists and loops I don't think there's any way you're going to add multiplayer functionality. Start one step at a time.

Share this post


Link to post
Share on other sites

Posted

Use UDP and turn it to P2P. The server will be used only for discovery
This will reduce network utilisation

Share this post


Link to post
Share on other sites

Posted

I wish I could remember VB.NET but it has been a decade...
The class to use is System.Net.Socket if you are aware of the Winsock OCX

Share this post


Link to post
Share on other sites

Posted

[quote name='Dr_Asik' timestamp='1351387733' post='595278001']
How does it not work? What do you expect it to do? Do you have a client as well? A listener is just that, a listener, it listens to incoming connections. You need one instance of your app that acts as the server and one (or multiple others) that act as the client. There's a link to an example TcpClient in that same tutorial page for TcpListener. Read up on tcp connections, how to establish a connection, how to pass messages around, how to close the connection.

"A lot of ifs" is a terrible way of going about this btw. What would you do for a 10x10 tic-tac-toe? Code 100 if-elses? What if you wanted to support multiple different sizes? If you don't know about lists and loops I don't think there's any way you're going to add multiplayer functionality. Start one step at a time.
[/quote]

The code errors when I try to run it..... I am not stupid when it comes to this stuff i have used winsock before i Know i need a client and a server I took a ccna class all about tcp/ip

Share this post


Link to post
Share on other sites

Posted

[quote name='togermano' timestamp='1351457778' post='595279763']The code errors when I try to run it....[/quote]What's the error then?

Share this post


Link to post
Share on other sites

Posted

What isnt an error?

Share this post


Link to post
Share on other sites

Posted

and i dont care if my code is crappy i wanna do it to learn and fix it up later with better coding x

Share this post


Link to post
Share on other sites

Posted

[quote name='togermano' timestamp='1351510141' post='595281073']
What isnt an error?
[/quote]

First off, move your "imports" lines above the Public Class Form1 - they need to stay first in the code document.

Then remove the class MyTcpListener, and the public shared main sub - they do not belong inside another Sub/Function/Method.

Next you will figure out that this code has an endless loop that will basicly lock up your program as soon as it starts (it will never stop "loading"). You need to either put this code in a separate thread or use the TcpListener asynchronously (spelling?)

Have a look at [url="http://msdn.microsoft.com/en-us/library/vstudio/system.net.sockets.tcplistener.beginacceptsocket(v=vs.90).aspx#Y0"]http://msdn.microsoft.com/en-us/library/vstudio/system.net.sockets.tcplistener.beginacceptsocket(v=vs.90).aspx#Y0[/url] for examples

Share this post


Link to post
Share on other sites

Posted

Your code [i]doesn't compile[/i]. It's not valid Visual Basic and Visual Studio should show you some error messages in its output and error windows when you attempt to start the program. These error messages can often tell you what the problems are and how to fix them.

- The Imports directives should go at the top of the file, not inside a class declaration
- Your MyTcpListener class is declared inside the Form1 class, which is illegal - move it after the "End Class" of Form1 or, better, to its own file
- You're declaring a Main() function inside MyTcpListener, but your project is probably a Windows Forms Application, which already has its own Main() function - a .NET program must have only one Main() function.
- The code that goes inside that Main() method should go in the OnLoad() method of the Form1 class, as I explained to you before

Do you even know what is a class, a module, a namespace, what do access modifiers do, how to override a virtual method, what are events, how to register/unregister to them, what's a Shared method vs non-Shared, what is the purpose of the Main() method, etc? Implementing multiplayer will require putting together several pieces which you seem to ignore the very nature of. It's not like you're going to copy-paste the correct code here and there and it's all magically going to work; even if it did, that wouldn't be very useful to you, would it? Start by properly learning Visual Basic and the .NET Base Class Library and then you'll be able to implement advanced functionality like this and understand what you're doing. Learn to walk before you run...

Share this post


Link to post
Share on other sites

Posted

thanks everyone and yes it is in an endless loop how do I put it in its own thread?

Share this post


Link to post
Share on other sites

Posted

never mind i got it

Share this post


Link to post
Share on other sites

Posted

[quote name='togermano' timestamp='1352412831' post='595307121']
thanks everyone and yes it is in an endless loop how do I put it in its own thread?
[/quote]Put that code in its own method and pass the method as a delegate to a [url="http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx"]BackgroundWorker[/url]. There are many more options for threading in .NET but that's probably the simplest one here.
1 person likes this

Share this post


Link to post
Share on other sites

Posted

[quote name='Dr_Asik' timestamp='1351387733' post='595278001']
How does it not work? What do you expect it to do? Do you have a client as well? A listener is just that, a listener, it listens to incoming connections. You need one instance of your app that acts as the server and one (or multiple others) that act as the client. There's a link to an example TcpClient in that same tutorial page for TcpListener. Read up on tcp connections, how to establish a connection, how to pass messages around, how to close the connection.

"A lot of ifs" is a terrible way of going about this btw. What would you do for a 10x10 tic-tac-toe? Code 100 if-elses? What if you wanted to support multiple different sizes? If you don't know about lists and loops I don't think there's any way you're going to add multiplayer functionality. Start one step at a time.
[/quote]

Currently I got it working that when I write something in a telnet client and using IFs it will trigger a msgbox depending on what I wrote into the telnet client. You say ifs a terrible way to do it then what is a good way to do it?

Share this post


Link to post
Share on other sites

Posted

For instance, if your messages are text messages of the form "1,2" where 1 and 2 are the line and column to play at, you could put all your textboxes in a two-dimensional array, parse the message as two integers, and use these as indexes into the array to obtain the corresponding textbox. No need for any ifs, works with any board size.

Share this post


Link to post
Share on other sites

Posted

Thanks! I may try to do it the if way and then try it with your way after

I ran into another problem I can't access any of form1s command buttons from the tcp/ip thread I have tried using form1.label1.text = "connected!!" it doesnt error but it doesnt work either. I googled the problem but none of it was any help

http://stackoverflow.com/questions/5683724/problem-accessing-a-textbox-control-from-another-class-thread-in-vb-net

Share this post


Link to post
Share on other sites

Posted

You're not allowed to update the UI from any other thread than the UI thread. Use the Invoke (synchronous) or BeginInvoke (asynchronous) method of the main form to pass UI updates (as delegates) from a background thread.

Share this post


Link to post
Share on other sites

Posted

[quote name='Dr_Asik' timestamp='1352568629' post='595310997']
You're not allowed to update the UI from any other thread than the UI thread. Use the Invoke (synchronous) or BeginInvoke (asynchronous) method of the main form to pass UI updates (as delegates) from a background thread.
[/quote]

Is there a sample of that somewhere?

Share this post


Link to post
Share on other sites

Posted

Public Shared Sub ticserver()



server = Nothing
Try
CheckForIllegalCrossThreadCalls = False
' Set the TcpListener on port 13000.
Dim port As Int32 = 13000
Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1")

server = New TcpListener(localAddr, port)

' Start listening for client requests.
server.Start()

' Buffer for reading data
Dim bytes(1024) As Byte
Dim data As String = Nothing

' Enter the listening loop. While True
Console.Write("Waiting for a connection... ")

' Perform a blocking call to accept requests. ' You could also user server.AcceptSocket() here.
client = server.AcceptTcpClient()

Console.WriteLine("Connected!")
Form1.PictureBox1.Show()
Form1.Label1.Text = "A client has connected to you"
Form1.Label1.Show()
data = Nothing

' Get a stream object for reading and writing
stream = client.GetStream()

Dim i As Int32

' Loop to receive all the data sent by the client.
i = stream.Read(bytes, 0, bytes.Length)
While (i <> 0)
' Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
Console.WriteLine("Received: {0}", data)

' Process the data sent by the client.
data = data.ToUpper()
Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)

' Send back a response.
stream.Write(msg, 0, msg.Length)

Console.WriteLine("Sent: {0}", data)

i = stream.Read(bytes, 0, bytes.Length)

End While

' Shutdown and end connection
' client.Close()

' Console.WriteLine("SocketException: {0}", e)
Finally
server.Stop()
End Try

Console.WriteLine(ControlChars.Cr + "Hit enter to continue....")
Console.Read()
End Sub 'MainEnd Class'MyTcpListener

[b]according to this [url="http://tech.xster.net/tips/invoke-ui-changes-across-threads-on-vb-net/"]http://tech.xster.ne...eads-on-vb-net/[/url] adding the code

Me.CheckForIllegalCrossThreadCalls = [color=#00C2FF]False[/color]
should make it work but it doesnt..... why does me. always error I remove it and the error is gone but still this code does nothing

"
Form1.PictureBox1.Show()
Form1.Label1.Text = "A client has connected to you"
Form1.Label1.Show()
data = Nothing"[/b]

Share this post


Link to post
Share on other sites

Posted

[quote name='togermano' timestamp='1352574100' post='595311098']
Is there a sample of that somewhere?
[/quote]Of course, googling any of the terms I mentionned will return you hundreds of useful results.

Don't disable checking for illegal cross-thread calls. You're making an illegal cross-thread call, disabling checking won't make it any less illegal.

Share this post


Link to post
Share on other sites

Posted

I dont get any of the codes they all use me.whatever and that always causes an error

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.