Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com o chat =/


Kaborge

Pergunta

e aew galera beleza

seguinte so novo com programação e tava tentando bola um Chat em VB... li sobre winsocks e tal e consegui ate, tem varios bugs que precisam ser concertados mas o principal é que o o host n consegue enviar mensagens para todos ( dividi o chat em 2... host e Users...) ele apenas envia a mensagem para o Ultimo conectados... vou estar postando aki partes da linha de comando e se possivel me ajudem aew galera porque a coisa ta feia =p

Componentes do projeto

Msgfim = TXT aonde ficaram as mensagens

Nick = TXT aonde ficara o nick

Msg = TXT aonde ficara a mensagem ate que o usuario precione o botao enviar para mandala

Lbl Coneccao = aponta quantas pessoas estao conectadas

Dim mensagem As String
Dim Conectados As Integer

Private Sub enviar_Click()
        msgfim.Text = msgfim.Text & nick.Text & ": " & msg.Text & vbCrLf
        mensagem = msgfim.Text
        For U = 1 To Conectados
        If wskServidor(U).State = 7 Then
        wskServidor(U).SendData mensagem
        End If
        Next U
        msg.Text = ""
        msg.SetFocus
  End Sub
  
Private Sub Form_Load()
Conectados = 0
wskServidor(0).LocalPort = 1544
wskServidor(0).Listen
End Sub

Private Sub Timer1_Timer()
Coneccao.Caption = Conectados
End Sub

Private Sub wskServidor_DataArrival(Index As Integer, ByVal bytesTotal As Long)
   Dim mensagem As String
   wskServidor(Index).GetData mensagem
   msgfim.Text = mensagem
   End Sub
   
Private Sub nick_click()
nick.Text = ""
End Sub



Private Sub wskServidor_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
Conectados = Conectados + 1
Load wskServidor(Conectados)
wskServidor(Conectados).LocalPort = 1544
wskServidor(Conectados).Accept requestID
End If
End Sub

é isso aew galera... por favor aponte erros e a possivel solução para o problema... o host so envia mensagem para o ultimo conectado e n para todos conectados

vlws

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

não entendi direito como você ta fazendo. você devia ter um programa rodando q ficaria como servidor. os outros todos se conectariam nele.

não tem sentido você fazer o for pra enviar pra todos no click do enviar. porque o enviar vai tar no cliente. o cliente so tem uma unica conexao. q é com o servidor. quando chegar no servidor ai sim tem q ser enviado pra todas as conexoes q tiver la.

teria q ser no data arrivel do winsock q estiver trabalhando como servidor.

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi o que você quise dizer....

Eu vou ter o Servidor rodando (o Host) e os Clientes (os user)

O User (o que vai se conectar no servidor) ta funcionando, por mais que eu abra 5 toda vez que eu envio ele chega no servidor e tIpo esse dae é o Servidor, eu queria que quando clica no Enviar enviasse pra todos conectados e eu tambem vou por isso que você falo que quando receber de alguém dai ele manda de volta a mensagem pra todos... Mas pretendo fazer disso mais doque o chat ... ia precisar enviar varias coisas para todos os conectados, mas eu n sei porque n ta dando, quando você clica no enviar so envia as coisas pro ultimo, isso que eu n to achando solução =/

Vlws t+

Link para o comentário
Compartilhar em outros sites

  • 0

a então esse codigo é do server?? e você ta tentnado mandar a mensagem pra todos os usuarios a partir do servidor, é isso??

bom, primera coisa, se o indice tiver comecando no 0 (caso você não tenha setado Option Base 1), o for acho q deveria ser assim não??

For U = 0 To Conectados - 1
comecando do 0. mas acho q o principal problema ta no ConnectionRequest. olha aquele primero if la:
If Index = 0 Then

pra q você pos ele ai exatamente??

acho q ele so ta aceitando a primera conexao não?? você aceita a conexao do winsock com indice 0 (o primero), da o load do proximo winsock, mas não ta aceitando as conexoes q chegarem nele. assim, você so vai ter uma conexao.

Link para o comentário
Compartilhar em outros sites

  • 0

Esse é o codigo do server, e estou tentando mandar mensagem apartir do server para todos os conectados

Tipo so BEm iniciante em VB, minha primeira vez com winsock, n sei bem como montar as coisas, eu peguei alguns codigos de chats na net e li sobre winsock e tentei fazer o meu chat...

Esse Index aew eu tambem n entendi muito bem a aplicação dele no chat, mas tipo quando cliente vai se conectar ele vai procura o winsock original... no caso o WskServidor(0) esse zero aew n é o index?

então se for quando ele tentar se conectar no WskServidor(0) (o Winsock de Index 0) ele vai cair naquele if... acredito que seja isso mas n sei te confirmar,mas quanto ao fato de todos os clientes se conectarem ta funcionando sim, porque tipo, coloquei um variavel no modo cliente e um timer que checa:

Isso eu coloquei no cliente:

Private Sub Timer1_Timer()

If WskCliente.State = sckConnected Then

Coneccao.Caption = "Conectado"

Else

Coneccao.Caption = "Desconectado"

End If

o timer é ativado de 1 em 1 segundo e a label fica como "Conectado" sinal que ele realmente esta conectado e se eu mandar a mensagem de qualquer um dos CLientes o servidor recebe, mas na hora de enviar ele so envia para o ultimo cliente que se conecto....

e tipo o for n funciona assim?

For U = 0 to conectados ( n quer dizer que ele vai fikar repetindo ate o Valor de U for igual ao conectados?)

Por favor me de uma luz nesses problemas cara e se possivel esclareça essas duvidas

Tipo... de alguns exemplo sei la e outros modos que eu poderia usar pra fazer com que o servidor envie pra todos por favor

Vlws aew rapaiz t+

Link para o comentário
Compartilhar em outros sites

  • 0

hum, acho q sei qual é o problema. se você tem certeza q ta conectado mesmo...

o q acontece é q a operacao do envio leva alguns milisegundos. e ai dentro do for você ta mandando as mensagens rapido demais. então quando chega no comando q envia a segunda, a primera ainda não foi enviada. mas ele cancela o envio da primera pra mandar a segunda e assim por diante ate a ultima.

faca o seguinte, envie as mensagens em um timer. tipo ponha um intervalo de 10 milisegundos nele e manda ir enviando cada mensagem por vez e veja se não funciona.

pra falar a verdade eu já tive tb esse problema e resolvi com o timer.

Link para o comentário
Compartilhar em outros sites

  • 0

Aew Kuroi vlw rapaiz :lol:

Funciono legal o esquema do timer que você falo... so apanhei um pouco pra aprender a faze um Timer para cada conectado (tipo os winsock.. da um Load pra cada conectado)

Vlws aew rapaiz fiko joia o negocio aki =p

consegui ate faze a bara de rolagem desce sozinha ahuhAhuauha

T+ rapaiz brigadao aew

fiko assim o code:

Private Sub Timer_Timer(Index As Integer)

lol = Timer(Index).Index

If wskServidor(lol).State = 7 Then

mensagem = msgfim.Text

wskServidor(lol).SendData mensagem

End If

End Sub

Private Sub wskServidor_ConnectionRequest(Index As Integer, ByVal requestID As Long)

If Index = 0 Then

conectados = conectados + 1

Load wskServidor(conectados)

wskServidor(conectados).LocalPort = 1544

wskServidor(conectados).Accept requestID

If conectados > 0 Then

Load Timer(conectados)

Timer(conectados).Interval = 250

Timer(conectados).Enabled = True

End If

End If

End Sub

Valeu cara T+ se ainda quiser ver o projeto manda a msg =p

Flws braços

Link para o comentário
Compartilhar em outros sites

  • 0

ficou legal, mas acho q talvez fosse melhor usar um timer só não??

tipo, ai você faz um contador e vai mandando a mensagem passando o contador como indice do winsock. e quando chegar no final você desabilita o timer (e so habilita quando ele mandar).

isso primero porque, pelo menos na minha opiniao, fica mais facil de controlar.

e depois porque é desperdicio de memoria e de processamento você carregar varios timer na memoria enqto podia tar usando so um.

mas se ta funcionando bem pra você ai, legal então.

quanto ao projeto não precisa mandar não, a não ser q você tenha mais algum problema e quera q eu de uma olhada.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...