|
|
Hello,
I'm pretty au fait with VB.NET but a complete novice to programming anything to do with networking. I'm trying to replicate the behaviour of one small part of an application we have so that I can build my own application which will be much simpler for our staff to use to perform that one function. The application is a server program.
Anyway, using various network sniffers I've identified the packets that the application sends. It seems that when it starts up it broadcasts a UDP packet over the network, and then the clients respond with ICMP echos, after which further TCP packets are sent to the clients. Well, I'm stuck at the first hurdle!
I need, to begin with, to replicate that initial UDP broadcast. Using .NET and lots of Googling I've been able to produce code which will send a UDP packet to the right IP and port. What I'm struggling with is the data of the packet. Because I have the packet as captured in SoftPerfect Network Protocol Analyser (much more user-friendly than Wireshark for my money) I know exactly what the packet should look like and I can even copy the hex of the original packet.
I can't then simply stick this hex code into a string and send it over UDP, it doesn't work. Presumably it needs to be in some kind of array, but all the references I can find to this online seem to involve CONVERTING a string to hex or hex to bytes. Surely since I already have the hex no conversion should be necessary? I just want to send it exactly as it is! When I did convert it to a byte array (if that's the right term, this is very new to me) and then sent it the network sniffer picked it up and the data in the packet was very different and much longer than the original one I'm trying to replicate.
Any help or advice would be greatly appreciated, from general tips about replicating network packets to actual code I can copy!
Thanks in advance.
|
|
|
|
|
All packet data is just an arrray of bytes. Since you have the value of every byte, all you have to do is recreate that data in an array. It's that data that is going to get sent in the packet. Even if you supply a String, each character in the string if converted to a byte or set of bytes and sent as part of the packet. You have to values for each byte, they're just presented to you in Hexadecimal form.
|
|
|
|
|
Hi,
there is nothing in TCP/IP or UDP that uses hex. It is all bytes, representing numbers; numbers aren't decimal or hex or octal, they are just a bunch of bits. Hex/decimal/octal is a human way to look at numbers, and it only exists as a string. Your sniffer is getting bytes, and showing them to you using a hex string (because that has a fixed length of 2 characters per byte), you should read each 2-character hex number as one byte value.
So if your sniffer sees "12CD" that would be two bytes, one with hex representation "12" (hence decimal value 18), and one "CD" (i.e. 205). So you would need a 2-element byte array, initialize it with 18 and 205 (or &12H and &CDH) and send it.
Luc Pattyn
Local announcement (Antwerp region): Lange Wapper? Neen!
|
|
|
|
|
That's really useful, I think I understand now, thank you. But given what you've said what code would I need to actually convert my long string of hex code into a byte array that I can send by UDP?
|
|
|
|
|
Ok, with a lot more Googling and trial and error I think I finally cracked it!
Dim sText As String = "00 00 84 00 00 00 00 02 00 00 00 00 0A 4D 61 67 69 63 69 6E 66 6F 53 06 4D 4C 49 4E 4B 53 04 5F 75 64 70 05 6C 6F 63 61 6C 00 00 0C 00 01 00 00 00 00 00 1E 1C 31 33 38 32 35 33 31 35 32 30 39 31 30 30 39 32 30 37 4D 61 67 69 63 69 6E 66 6F 53 00 C0 17 00 0C 00 01 00 00 00 1E 00 02 C0 34"
Dim sData() As String
Dim iByte As Long, lByteCount As Long
sData = Split(Trim(sText), " ")
lByteCount = UBound(sData) + 1
Dim BData(lByteCount - 1) As Byte
For iByte = 0 To lByteCount - 1
BData(iByte) = CByte("&H" & sData(iByte))
Next iByte
|
|
|
|
|
Thanks in adv.
i have made one setup in VS 2008 to deploy a project having sql server 2005 as a back end and VS2008 as front end with default Crystal reports
I am getting this error when trying to run application but it runs fine where VS2008 is installed and no error comes
a network-related or instance-specific error occurred while establishing connection to sql server , the server was not found or was not accessible, verify that instance name is correct and SQL server is configured to allow remote connections (provider : Named Pipes Provider , error:40 could not open a connection to Sql Server)
Best Of Regards,
SOFTDEV
If you have knowledge, let others light their candles at it
|
|
|
|
|
It would appear that either the SQL Server is not configured to accept network connections (which is default in a new installation) or the connection string is wrong somehow. Which version of SQL Server are you using? Is it an Express Edition? Does the database exist on the server?
|
|
|
|
|
Sql server 2005 , no its not express edition , problem is that on a same network it works fine and no error comes where vs2008 is installed and it could not connect on the PC where vs2008 is not installed
Best Of Regards,
SOFTDEV
If you have knowledge, let others light their candles at it
|
|
|
|
|
What does the connection string look like?
|
|
|
|
|
I have one Solution which contains different projects one of them is GUI , and another is DAL
DAL has a connection string in DAL Settings/Configurations looks like this
<br />
Data Source=SOFTDEV;Initial Catalog=DB;Persist Security Info=True;User ID=user;Password=pass<br />
and i calls this at GUI by adding the project reference to GUI.
Best Of Regards,
SOFTDEV
If you have knowledge, let others light their candles at it
|
|
|
|
|
OK, so can you ping the SOFTDEV machine from the ones that cannot connect?
If so, what is the SOFTDEV machine? Does its SQL Server have TCP/IP connections turned on?
|
|
|
|
|
Yes it is pinging
when applications is installed then i am changing the Server Name (which is pinging) in the file "Dal.exe " xml config file.
in code i am getting connection string like this
<br />
Public gConnectionString As String = My.Settings.ConString.ToString<br />
changing the file will give me the new Server Name or not as in source code in app.config if i change server name then by clicking on My Project it says that the app.config file is changed
changing app.config is same as changing the My Project ====> Settings means it will update my settings file or i have to do something else
Thanks alot for the help.
Best Of Regards,
SOFTDEV
If you have knowledge, let others light their candles at it
|
|
|
|
|
Absolutely none of this made any real sense at all.
So, basically, you're testing this on your development box and the database is on your development box, correct?
When you deploy the app, you're changing the SQL Server name in the Dal.exe.config file, but it's not working, correct?
OK, again, is the SQL Server on the target machine configured to accept connections over TCP/IP? If not, change it.
Does the database exist on that server in the default instance or is it in another SQL Server instance?? If not, create it, or change your connection string to reflect the correct instance name.
softdev_sup wrote: changing app.config is same as changing the My Project ====> Settings means it will update my settings file or i have to do something else
An app.config file is nothing but a text file containing XML data. You can change the Dal.exe.config file any time you want to reflect the new SQL Server computer name you're trying to connect to. You DO have the correct server name, right?
softdev_sup wrote: Public gConnectionString As String = My.Settings.ConString.ToString
You realize you're one of those people who calls .ToString() on a String, needlessly, right?
|
|
|
|
|
"When you deploy the app, you're changing the SQL Server name in the Dal.exe.config file, but it's not working, correct?"
yes this is what i am trying to do , i have done it alot of time but dont know whats wrong in it this time other projects are working fine , connection string is ok , i tried odbc its also connecting , i will try tomorrow by getting the connection string on the message box with exeception message and will see that its getting which connection string ,
you are right about ToString() , i tried to rap that as much as i can bcz of that error , anyhow i will try tomorrow and will let you know also , i think so its only bcz of connection string some other project might also have some connection string which it is getting
Best Of Regards,
SOFTDEV
If you have knowledge, let others light their candles at it
|
|
|
|
|
Either you have a connectiong string, or part of it, hard-coded into your app, or you're not changing the correct connection string int he .config file on the machine you installed the app on, or you're not editing the correct .config file. It should be the applications config file, not one you may have put in for a .DLL project.
|
|
|
|
|
yes you r right it was reading connections string from another project, i solved it thank you so so much for your help
Best Of Regards,
SOFTDEV
If you have knowledge, let others light their candles at it
|
|
|
|
|
Hi everybody,
I have to develop a hangman game as a school project.
I,m using VB.NET 2005.
My problem at the moment is that I have to create an array and upload the letters of a word into the array.
then read each letter into a textbox.
Here is the code that I have so far please help.
I've put a comment in area I think is troubled
Public Class frmGame
Friend array(20) As String
Dim word As String = "Hangman"
Dim letters As Integer = word.Length
Private Sub Closetop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Closetop.Click
End
End Sub
Private Sub new_word()
Dim i, f, g As Integer
'Trouble Area
Do Until letters
array(i = i + 1) = word.Chars(f = f + 1)
Loop
txtLetter1.Text = array(1)
txtLetter2.Text = array(2)
txtLetter3.Text = array(3)
txtLetter4.Text = array(4)
txtLetter5.Text = array(5)
txtLetter6.Text = array(6)
txtLetter7.Text = array(7)
txtLetter8.Text = array(8)
End Sub
Private Sub frmGame_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
new_word()
End Sub
End Sub
End Class
|
|
|
|
|
Hi
Try This
Private Sub new_word()
Dim i, f, g As Integer
Dim array() as char = word.toCharArray()
‘Do Until letters
‘array(i = i + 1) = word.Chars(f = f + 1)
‘Loop
txtLetter1.Text = array(1).ToString
txtLetter2.Text = array(2).ToString
txtLetter3.Text = array(3).ToString
txtLetter4.Text = array(4).ToString
txtLetter5.Text = array(5).ToString
txtLetter6.Text = array(6).ToString
txtLetter7.Text = array(7).ToString
txtLetter8.Text = array(8).ToString
End Sub
|
|
|
|
|
I tried that just now.
Just calls up an unhandled exception in my array
so the data doesn't go into my array.
|
|
|
|
|
whats like that:
Private Sub new_word()
'Trouble Area
txtLetter1.Text = word.Chars(1)
txtLetter2.Text = word.Chars(2)
txtLetter3.Text = word.Chars(3)
txtLetter4.Text = word.Chars(4)
txtLetter5.Text = word.Chars(5)
txtLetter6.Text = word.Chars(6)
txtLetter7.Text = word.Chars(7)
txtLetter8.Text = word.Chars(8)
End Sub
|
|
|
|
|
Ok but is it possible to do that with a loop.
to minimize coding.
kind of like i did the loop in the first one?
And what about my array or is that redundant?
|
|
|
|
|
of course this is possible with a loop! this would be a much better way of coding!!
the array is redundant in that short code, because the word contains a array or is an array of characters.. retrieve the array by word.GetCharArray().. someone postet above..
if you want this working with "all words" existing xD than create the textboxes dynamic and fill them dynamic looping through the word..
iterate through the word to get each character create a textbox for the character and fill it..
greeettz
|
|
|
|
|
I have absolutely no idea what you just said there but if it can work thanx.
can you give me some kind of example please?
the only way i know if itterating through the word is :
do until
word.chars( i += 1)
loop
|
|
|
|
|
here this could be ONE way..
Public Sub new_word(byval word as String)
Dim c As Char
Dim tb As TextBox
'remove all controls from form..
me.Controls.Clear()
' iterate through the word
For Each c In word
'create a new textbox
tb = New TextBox
tb.Tag = c ' hold the word to compare with entered char
tb.Text = string.Empty ' set the empty string (user has to enter..)
tb.Dock = DockStyle.Top '..
' add event if user enters a text
AddHandler tb.TextChanged, AddressOf Me.charChanged
' add the control to form
me.Controls.Add(tb)
Next
End Sub
Private sub charChanged(byval sender As Object,byval e As EventArgs)
Dim tb As TextBox
tb = directcast(sender, TextBox)
If not tb Is Nothing Then
If tb.Text = tb.Tag Then
tb.BackColor = System.Drawing.Color.Green
Else
tb.BackColor = System.Drawing.Color.Red
End If
End If
'.....
End Sub
|
|
|
|