28. februar 2010 - 02:45Der er
18 kommentarer og 1 løsning
Klassen er ikke registreret (Undtagelse fra HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Hej, jeg sider her og programmere i VB 2008 Express Edition.
Jeg er igang med at lave en chat hvor jeg følger en guide på youtube. Og jeg har følget guiden fra punkt til prik. Og det skal siges i videoen som jeg ser, får han også de fejl som jeg får men han kan så åbne hans program og bruge det og det kan jeg ikke. men jeg kan lige nævne de fejl jeg får.
Der hvor jeg marker "" om et ord. er der hvor jeg får fejlen.
Form1 ---- Private Sub Sock_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Sock.DataArrival Dim o As Object Dim received As String Dim character As Byte
Private Sub Sock_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Sock.DataArrival Dim o As Object Dim received As String Dim character As Byte
Sock.GetData("o")
received = String.Concat(received, Chr(character))
Eller måske skulle du bare fortælle hvad du har brug for så vi kan finde en ren .NET for det samme.
Synes godt om
Slettet bruger
28. februar 2010 - 03:11#7
Jeg har smidt de styks ind hvor der er fejl på og markert teksten med "" som den brokker sig over.
Men for en sikkerheds skyld så smider jeg lige hele koden ind.
Fejlene er på line 39 & 44
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Sock.Close()
Sock.LocalPort = 2909 Sock.Listen() ListBox1.Items.Add("Server Is Listening...") Form2.Show() End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Sock.SendData("Server : " & TXTsend.Text) Catch ex As Exception ListBox1.Items.Add("Sending Failed") End Try
TXTreceive.Text = String.Concat(TXTreceive.Text, vbNewLine, TXTsend.Text) TXTsend.Text = Nothing End Sub
Private Sub Sock_ConnectionRequest(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles Sock.ConnectionRequest Sock.Close() ListBox1.Items.Add("Incomming Request...") Sock.Accept(e.requestID) Sock.SendData("Connected!") ListBox1.Items.Add("Connected!") End Sub
Private Sub Sock_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Sock.DataArrival Dim o As Object Dim received As String Dim character As Byte
Sock.GetData(o) For Each character In o
Next
TXTreceive.Text = String.Concat(TXTreceive.Text, vbNewLine, received) End Sub End Class
Synes godt om
Slettet bruger
28. februar 2010 - 03:18#8
#2 Du skriver at jeg skal skifte fra COM til .NET Nu er jeg ikke den store inde for programmering, men skal jeg så hente en ny udgave eller anden udgave ned af Visual basics eller hvordan?
Jeg antager at du er ved at lave noget chat ligende. Det er ikke helt klart for mig om det er direkte mellem to apps eller N apps forubundet til en server.
Den nemmeste løsning er at skifte paradigme fra event driven til at have en tråd per socket forbindelse.
Public Class ChatMain Public Shared Sub Main(args As String()) Dim srv As New Server() srv.Run() End Sub End Class
Public Class Server Private allclients As List(Of ClientHandler) Public Sub Run() allclients = New List(Of ClientHandler)() Dim server As New TcpListener(IPAddress.Any, 50000) server.Start() While True Dim client As TcpClient = server.AcceptTcpClient() Dim ch As New ClientHandler(client, Me) allclients.Add(ch) Dim t As Thread = New Thread(AddressOf ch.Run) t.Start() End While End Sub Public Sub SendAll(msg As String) For Each ch As ClientHandler In allclients ch.Send(msg) Next End Sub Public Sub SendOne(msg As String, address As String) For Each ch As ClientHandler In allclients If ch.Remote.IndexOf(address) = 0 Then ch.Send(msg) End If Next End Sub Public Sub Remove(ch As ClientHandler) allclients.Remove(ch) End Sub End Class
Public Class ClientHandler Private m_remote As String Private rdr As StreamReader Private wrt As StreamWriter Private srv As Server Public Sub New(cli As TcpClient, srv As Server) m_remote = cli.Client.RemoteEndPoint.ToString() rdr = New StreamReader(cli.GetStream()) wrt = New StreamWriter(cli.GetStream()) Me.srv = srv End Sub Public Sub Run() While True Dim line As String = rdr.ReadLine() Dim parts As String() = line.Split(" ".ToCharArray()) Dim cmd As String = parts(0) If cmd = "SEND" Then Dim address As String = parts(1) If address = "*" Then srv.SendAll(line.Substring(cmd.Length + address.Length + 2)) Else srv.SendOne(line.Substring(cmd.Length + address.Length + 2), address) End If ElseIf cmd = "EXIT" Then srv.Remove(Me) Return End If End While End Sub Public Sub Send(msg As String) SyncLock wrt wrt.WriteLine(msg) wrt.Flush() End SyncLock End Sub Public ReadOnly Property Remote() As String Get Return m_remote End Get End Property End Class
Imports System Imports System.Collections.Generic Imports System.Net Imports System.Net.Sockets Imports System.Threading
Namespace E Public Class AClient Private cli As Socket Private buf As Byte() Private buflen As Integer Public Sub New(cli As Socket, srv As AServer) Console.WriteLine("Connection open from " & Convert.ToString(cli.RemoteEndPoint)) Me.cli = cli buf = New Byte(10239) {} buflen = 0 cli.BeginReceive(buf, buflen, buf.Length - buflen, SocketFlags.None, New AsyncCallback(AddressOf GotData), srv) End Sub Public Sub GotData(res As IAsyncResult) Dim n As Integer = cli.EndReceive(res) Console.WriteLine("Read " & n & " bytes from " & Convert.ToString(cli.RemoteEndPoint)) If n > 0 Then buflen += n Dim lf As Integer = Array.IndexOf(buf, CByte(AscW(ControlChars.Lf)), 0, buflen) If lf >= 0 Then lf += 1 DirectCast(res.AsyncState, AServer).SendAll(buf, lf, Me) If buflen > lf Then Array.Copy(buf, lf, buf, 0, buflen - lf) End If buflen -= lf End If cli.BeginReceive(buf, buflen, buf.Length - buflen, SocketFlags.None, New AsyncCallback(AddressOf GotData), DirectCast(res.AsyncState, AServer)) Else Console.WriteLine("Connection closed from " & Convert.ToString(cli.RemoteEndPoint)) DirectCast(res.AsyncState, AServer).Remove(Me) End If End Sub Public Sub Send(buf As Byte(), buflen As Integer) Console.WriteLine("Write " & buflen & " bytes to " & Convert.ToString(cli.RemoteEndPoint)) cli.Send(buf, buflen, SocketFlags.None) End Sub End Class Public Class AServer Private cli As List(Of AClient) Private srv As Socket Public Sub New(port As Integer) cli = New List(Of AClient)() srv = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) srv.Bind(New IPEndPoint(IPAddress.Any, port)) srv.Listen(10) srv.BeginAccept(New AsyncCallback(AddressOf GotConnection), srv) End Sub Public Sub GotConnection(res As IAsyncResult) cli.Add(New AClient(srv.EndAccept(res), Me)) srv.BeginAccept(New AsyncCallback(AddressOf GotConnection), srv) End Sub Public Sub Remove(acli As AClient) cli.Remove(acli) End Sub Public Sub SendAll(buf As Byte(), buflen As Integer, sender As AClient) Console.WriteLine("Write " & buflen & " bytes to all") For Each acli As AClient In cli If sender IsNot acli Then acli.Send(buf, buflen) End If Next End Sub Public Sub Close() srv.Close() End Sub End Class Public Class Program Public Shared Sub Main(args As String()) Dim server As New AServer(1234) Console.ReadKey() server.Close() End Sub End Class End Namespace
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.