TCP/IP Network Programming

Tips >> Visual Basic

 

Network programming is based around the Winsock control. To use the Winsock Control, add it to the ToolBox by selecting the "Components" menu item and select "Microsoft Winsock Control 6.0" from the list. The Winsock control is not visible to the user when the application is run and provides access to Transfer Control Protocol (TCP) and User Datagram Protocol (UDP) Network Services.

Transfer Control Protocol (TCP)

The Transfer Control Protocol (TCP) is used to create and maintain a connection to a remote computer. To set the Winsock control to TCP, set Winsock's Protocol Property to "sckTCPProtocol". The computers are able to share information through the connection. The Client must know the Server's name or Internet Protocol IP address, set in the RemoteHost Property of the Winsock control. The Client must also know the Port number on which the Server will be listening, set in the RemotePort Property of the Winsock control.

If tcpClient.RemoteHost = "" Then
     tcpClient.RemoteHost = "localhost"
End If
tcpClient.RemotePort = 3456
tcpClient.Connect

 

The LocalPort Property must be set on the Server to specify which Port it is listening to.

tcpServer.LocalPort = 3456
tcpServer.Listen

 

When the Client requests a connection, the ConnectionRequest Event occurs. The Accept method is used within the ConnectionRequest event to complete the connection.

When connected, information is sent and received using the SendData and GetData methods. When data is received, the DataArrival Event occurs.

SIMPLE TCP CHAT PROGRAM

The following describes how to create a simple TCP based chat program. The program consists of two parts, a server and a client.

TCP CHAT SERVER

The Server Application has a Winsock control named tcpServer using the Protocol sckTCPProtocol, and two TextBoxes, named txtOutput and txtSend. txtOutput's MultiLine Property is set to True.

Option Explicit
Private Sub Form_Load()
     txtSend.Enabled = False
     txtOutput.Enabled = False
     tcpServer.LocalPort = 3456
     tcpServer.Listen
End Sub
Private Sub Form_Unload(Cancel As Integer)
     tcpServer.Close
End Sub
Private Sub tcpServer_Close()
     txtSend.Enabled = False
     txtOutput.Enabled = False
     tcpServer.Close
     txtOutput.Text = txtOutput.Text & "Client closed connection" & vbCrLf & vbCrLf
     txtOutput.SelStart = Len(txtOutput.Text)
     tcpServer.Listen
End Sub
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
     If tcpServer.State <> sckClosed Then
          tcpServer.Close
     End If
     txtSend.Enabled = True
     txtOutput.Enabled = True
     tcpServer.Accept requestID
     txtOutput.Text = tcpServer.RemoteHostIP & ":" & _
     tcpServer.RemotePort & _
     " connected" & vbCrLf & vbCrLf
End Sub
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
     Dim msg As String
     tcpServer.GetData msg
     txtOutput.Text = txtOutput.Text & msg & vbCrLf
     txtOutput.SelStart = Len(txtOutput.Text)
End Sub
Private Sub tcpServer_Error(ByVal Number As Integer, Description As String, _
     ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, _
     ByVal HelpContext As Long, CancelDisplay As Boolean)
     MsgBox Source & ": " & Description, vbExclamation, "TCP/IP Error"
End Sub
Private Sub txtOutput_GotFocus()
     If txtOutput.Enabled = True Then
          txtSend.SetFocus
     End If
End Sub
Private Sub txtSend_KeyPress(KeyAscii As Integer)
     If KeyAscii = 13 Then
          KeyAscii = 0
          tcpServer.SendData "SERVER: " & txtSend.Text
          txtOutput.Text = txtOutput.Text & "SERVER: " & txtSend.Text & vbCrLf
          txtOutput.SelStart = Len(txtOutput.Text)
          txtSend.Text = ""
     End If
End Sub

 

 

TCP CHAT CLIENT:

The Client Application has a Winsock control named tcpClient using the Protocol sckTCPProtocol, and two TextBoxes named txtOutput and txtSend. txtOutput's MultiLine Property is set to True.

Option Explicit
Private Sub Form_Load()
     Dim strPrompt As String

     strPrompt = "Enter the IP address of the server"
     txtSend.Enabled = False
     txtOutput.Enabled = False
     tcpClient.RemoteHost = InputBox(strPrompt, "IP Address", "127.0.0.1")
     If tcpClient.RemoteHost = "" Then
          tcpClient.RemoteHost = "localhost"
     End If
     tcpClient.RemotePort = 3456
     tcpClient.Connect
End Sub
Private Sub Form_Unload(Cancel As Integer)
     tcpClient.Close
End Sub
Private Sub tcpClient_Close()
     txtSend.Enabled = False
     txtOutput.Enabled = False
     tcpClient.Close
     txtOutput.Text = txtOutput.Text & "Server closed connection" & vbCrLf & vbCrLf
     txtOutput.SelStart = Len(txtOutput.Text)
End Sub
Private Sub tcpClient_Connect()
     txtSend.Enabled = True
     txtOutput.Enabled = True
     txtOutput.Text = tcpClient.RemoteHostIP & _
     ":" & tcpClient.RemotePort & _
     " connected" & vbCrLf & vbCrLf
End Sub
Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
     Dim msg As String
     tcpClient.GetData msg
     txtOutput.Text = txtOutput.Text & msg & vbCrLf
     txtOutput.SelStart = Len(txtOutput.Text)
End Sub
Private Sub tcpClient_Error(ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, _
ByVal HelpContext As Long, CancelDisplay As Boolean)
     MsgBox Source & ": " & Description, vbExclamation, "TCP/IP Error"
End Sub
Private Sub txtOutput_GotFocus()
     If txtOutput.Enabled = True Then
          txtSend.SetFocus
     End If
End Sub
Private Sub txtSend_KeyPress(KeyAscii As Integer)
     If KeyAscii = 13 Then
          KeyAscii = 0
          tcpClient.SendData "CLIENT: " & txtSend.Text
          txtOutput.Text = txtOutput.Text & "CLIENT: " & txtSend.Text & vbCrLf
          txtOutput.SelStart = Len(txtOutput.Text)
          txtSend.Text = ""
     End If
End Sub

 

TCO/IP APPLICATION:

USER DATAGRAM PROTOCOL (UDP)

The User Datagram Protocol (UDP) is a Connectionless protocol and unlike TCP does not establish a connection. To set the Winsock control to UDP, set Winsock's Protocol Property to sckUDPProtocol. The computers are able to share information through the connection. Data is sent by setting the Client's LocalPort property and the Server's RemoteHost and RemptePort Properties to the Internet address and LocalPort Property of the Client.

Data is sent and received using the SendData and GetData methods. When data is received, the DataArrival Event occurs.

SIMPLE UDP CHAT PROGRAM:

The following describes how to create a simple UDP based chat program. Like the TCP chat program, this example is consists of a server and a client.

UDP CHAT SERVER:

The Server Application has a Winsock control named udpServer using the Protocol sckUDPProtocol, and two TextBoxes named txtOutput and txtSend. txtOutput's MultiLine Property is set to True.

Option Explicit
Private Sub Form_Load()
     udpServer.Bind 3456
End Sub
Private Sub Form_Unload(Cancel As Integer)
     udpServer.Close
End Sub
Private Sub udpServer_DataArrival(ByVal bytesTotal As Long)
     Dim msg As String
     udpServer.GetData msg
     txtOutput.Text = txtOutput.Text & udpServer.RemoteHostIP
     txtOutput.Text = txtOutput.Text & ":" & udpServer.RemotePort
     txtOutput.Text = txtOutput.Text & " " & msg & vbCrLf
     txtOutput.SelStart = Len(txtOutput.Text)
End Sub
Private Sub txtOutput_GotFocus()
     txtSend.SetFocus
End Sub
Private Sub txtSend_KeyPress(KeyAscii As Integer)
     If KeyAscii = 13 Then
          KeyAscii = 0
          udpServer.SendData txtSend.Text
          txtOutput.Text = txtOutput & "Sent: " & txtSend.Text & vbCrLf
          txtOutput.SelStart = Len(txtOutput.Text)
          txtSend.Text = ""
     End If
End Sub

 

UDP CHAT CLIENT:

The Client Application has a Winsock control named udpClient using the Protocol sckUDPProtocol, and two TextBoxes named txtOutput and txtSend. txtOutput's MultiLine Property is set to True.

Option Explicit
Private Sub Form_Load()
     Dim msg As String
     msg = "Enter the IP address of the server"
     udpClient.RemoteHost = InputBox(msg, "IP Address", "localhost")
     If udpClient.RemoteHost = "" Then
          udpClient.RemoteHost = "localhost"
     End If
     udpClient.RemotePort = 3456
End Sub
Private Sub Form_Unload(Cancel As Integer)
     udpClient.Close
End Sub
Private Sub udpClient_DataArrival(ByVal bytesTotal As Long)
     Dim msg As String
     udpClient.GetData msg
     txtOutput.Text = txtOutput.Text & udpClient.RemoteHostIP
     txtOutput.Text = txtOutput.Text & ":" & udpClient.RemotePort
     txtOutput.Text = txtOutput.Text & " " & msg & vbCrLf
     txtOutput.SelStart = Len(txtOutput.Text)
End Sub
Private Sub txtOutput_GotFocus()
     txtSend.SetFocus
End Sub
Private Sub txtSend_KeyPress(KeyAscii As Integer)
     If KeyAscii = 13 Then
          KeyAscii = 0
          udpClient.SendData txtSend.Text
          txtOutput.Text = txtOutput.Text & "Sent: " & txtSend.Text & vbCrLf
          txtOutput.SelStart = Len(txtOutput.Text)
          txtSend.Text = ""
     End If
End Sub

 

If you don't find what you are looking for. Please click here to submit your query, our experts will reply soon.

 

News / Updates New version of cheque printing software is up. Can configure date in box. http://VirtualSplat.com/cp6.exe
E-mail : sales at virtualsplat dot com
Phone : +91 022 28067978