• 0

[VB.NET] In class we made a simple tictactoe program but how do you use tcp


Question

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?

Recommended Posts

  • 0
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....
  • 0

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.

  • 0

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.

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.....

  • 0

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.....

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.

  • 0

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.

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

  • 0

What isnt an error?

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 http://msdn.microsoft.com/en-us/library/vstudio/system.net.sockets.tcplistener.beginacceptsocket(v=vs.90).aspx#Y0 for examples

  • 0

Your code doesn't compile. 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...

  • 0

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

Put that code in its own method and pass the method as a delegate to a BackgroundWorker. There are many more options for threading in .NET but that's probably the simplest one here.
  • 0

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.

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?

  • 0

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.

  • 0

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

  • 0

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.

  • 0

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.

Is there a sample of that somewhere?

  • 0

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

according to this http://tech.xster.ne...eads-on-vb-net/ adding the code

Me.CheckForIllegalCrossThreadCalls = False

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"

  • 0

Is there a sample of that somewhere?

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.

  • 0

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

"Me" is a reference to the current object, for instance if your code is inside your main Form class (like most tutorials assume), then "Me" is a reference to the Form object, which has an Invoke and a BeginInvoke method. Since I suppose you segregated your background thread code to another class, you'll have to pass it a reference to the Form object in order to invoke any methods of the Form from it. Alternatively, you could simply bring that code back to the main Form class and you'd be able to use "Me" to reference to Form then.
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • For a guy who claims to hate Farage and the ignorant, gullible, rightwing racist skinheads sponsored by Putin that his lies represent, you sure are quoting them time and time and time again, mate. I guess you're conveniently ignoring the fact that your country and commonwealth just happened to work much better when it was still part of the E.U.? Denial isn't just a river in Egypt.
    • Do you live in the U.K? Do any of the people here that are against the UK leaving the E.U, live in the U.K? If not then why are you bothered? If you do live here then it is a different thing . Brexit was a good idea, should have done it years before, it was done badly, but the idea was good. You are saying the same thing as remainers do, oh we did what Putin wanted, we listened to the lies and Farage. I hate Farage and never believed most of what he said, certainly did not believe the £350m a week for the NHS. But we did pay a lot of money to the E.U and yes some of it came back, but what is the point of paying it out for only some of it to come back? Get out of the E.U, no money to them and in theory we can use the money to do things in the country. I said in theory, but our governments are a total and complete waste of space. No matter what colour rosette they wear. You and others say it was a mistake and yet the two main parties in the U.K are not looking at rejoining the EU, I wonder why that is? I was not tricked by anyone. Makes no odds now, we are out and have been for 10 years, what we need is a decent government to run the country. All they do is shout at each other like a load of kids and seems to do nothing and make this country more into a police and nanny state. Getting more like China all the time.
    • 4TB TEAMGROUP MP44Q, 2TB T-Force G50, and 2TB WD My Passport SSDs drop to great prices by Fiza Ali Prime Day may be over, but there are still worthwhile storage deals available, including discounts on SSDs for shoppers who missed the event or are looking to upgrade their storage solution. Particularly, 2TB Western Digital My Passport, 2TB TEAMGROUP T-Force G50, and 4TB TEAMGROUP MP44Q SSD are selling at great prices with up to 23% off. The 2TB TEAMGROUP T-Force G50 is an M.2 2280 PCIe 4.0 x4 NVMe SSD with sequential read speeds of up to 5,000MB/s and sequential write speeds of up to 4,500MB/s. The drive has an endurance rating of 1,300 TBW (terabytes written) and features a DRAM-less design. The company specifies a mean time between failures (MTBF) of 3 million hours. The drive includes an "ultra-thin" graphene heat spreader that helps dissipate heat without significantly increasing the drive's thickness. It also supports S.M.A.R.T. monitoring, allowing compatible software to monitor drive health and operating status. The SSD is rated for operating temperatures from 0°C to 70°C, with a storage temperature range of -40°C to 85°C. The drive is backed by a five-year limited warranty as well. 2TB TEAMGROUP T-Force G50 SSD: $269.99 (Amazon US) The TEAMGROUP MP44Q is an M.2 2280 PCIe 4.0 x4 NVMe SSD that delivers sequential read speeds of up to 7,000MB/s and sequential write speeds of up to 5,900MB/s. It uses 3D QLC NAND flash memory to provide 4TB of storage capacity for games, applications, media files, and other data. The drive has an endurance rating of 2,000 TBW and an MTBF of 1.6 million hours. The SSD features a DRAM-less design and supports TEAMGROUP's S.M.A.R.T. monitoring software, allowing users to monitor drive health, temperature, and remaining lifespan. For thermal management, the MP44Q also includes an "ultra-thin" graphene heat spreader. It is designed to operate at temperatures between 0°C and 70°C and can be stored at temperatures ranging from -40°C to 85°C. The SSD is also backed by a five-year limited warranty. 4TB TEAMGROUP MP44Q SSD: $478.99 (Amazon US) The 2TB WD My Passport SSD connects via a USB-C port using the USB 3.2 Gen 2 interface. It delivers sequential read speeds of up to 1,050MB/s and sequential write speeds of up to 1,000MB/s through NVMe technology. In terms of security features, the drive includes password protection with 256-bit AES hardware encryption. The SSD is also designed to resist shock and vibration and is rated to withstand drops from heights of up to 6.5 feet. The recommended operating temperature range is 5°C to 35°C, while the non-operating temperature range is -20°C to 65°C. This drive is also backed by a five-year limited warranty. 2TB Western Digital My Passport SSD: $279.99 (Amazon US) Good to know This Amazon deal is U.S. specific, and not available in other regions unless specified. We only use first-party seller links (at the time of article publishing); ensure that you purchase from a first-party seller link only. Check out Today's Deals on Amazon | or our recent tech deals. Become a Prime member (for Students or SNAP) via Neowin Get Prime Access - Prime for half price (for qualifying Medicaid, EBT, SNAP) Subscribe to Prime Video, Audible Plus, Music Unlimited or Kindle Unlimited via Neowin As an Amazon Associate, we earn from qualifying purchases.
    • Yeah... The root of my comment, ostensibly, is how to spin the story via the actual technical merits of the solution! * Decentralized (aka federated) solution with built-in encrypted ephemeral message transport, * Transport via Relays (intermediary servers) with no message archival, * Second configurable pathway are actual email servers (if DNS records are programmed accordingly) via IMAP protocols carriage, * "Chat-over-Email" is the design pattern adopted; it can either leverage full-blown Email Server (must use the INBOX folder) to exchange all received messages/edits/reactions (so be weary of notifications overloads) [best practice is creating a separate email acct used explicitly for federated chat purposes!] or leverage its built-in Relay Server mechanism which actually resides on-device (by default but can be configured otherwise), * By virtue of be a decentralized/federated model, all other intermediary servers who may pass-along messages (while the recipient's final relay/device is inaccessible) cannot snoop on the messages due to the encrypted nature of contents. The intermediaries may, however, analyze the metadata due to the simple fact that routing mechanisms require hints for relay destinations. Unfortunately, whomever is posting about DeltaChat across socials are misleading with "zero metadata" claims -- especially when the Relays (according to their own technical documents) mandate the addition of chat-version metadata and other decorations in order to actually transport any message. -- Based on this summary, I'd prefer if they'd better dual-path message transport (email server add-in, federated relay engine) rather than patch-on email protocols to existing federated social media frameworks. They're frankensteining something rather than extending widely-deployed technology stacks.
    • Decentralized search result anonymization...
  • Recent Achievements

    • Week One Done
      flexorcist earned a badge
      Week One Done
    • One Month Later
      Woland13 earned a badge
      One Month Later
    • Week One Done
      Woland13 earned a badge
      Week One Done
    • One Year In
      bernmeister earned a badge
      One Year In
    • Week One Done
      Scoobystu earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      493
    2. 2
      +Edouard
      225
    3. 3
      PsYcHoKiLLa
      148
    4. 4
      Steven P.
      75
    5. 5
      FloatingFatMan
      71
  • Tell a friend

    Love Neowin? Tell a friend!