WINSOCK - ENVIO DE ARQUIVOS - PERDA DE PACOTE ?
BOM O Q OCORRE é O SEGUNTE O PROGRAMA Q SITEI EM ALGUNS TOPICOS DE AJUDA ATRAS MANDA IMAGENS PEQUENAS ATE AI TUDO BEM AKI ESTOU NA PARTE DE TRANSFERENCIA DE ARQUIVOS , ASSIM SE EU MANDAR UM ARQUIVO MENOR Q 1 MB CHEGA NORMAL MAIOR Q ISSO CHEGA 800 KB EU USO A SEGUINTE ROTINA ...
CLIENTE ->
DIM ARQ AS STRING
Open [Ô]C:\TESTE.TXT[Ô] For Binary As #1
Me.ARQ = Input(LOF(1), 1)
Close #1
WINSOCK.SEND [Ô]TRANS|[Ô] & ARQ
[ô]ISSO MANDANDO
AGORA RECEBENDO
NO EVENTO DATAARRIVAL
DIM SEP AS STRING
DIM REB AS STRING
WINSOCK.GETDATA REB
SEP = SPLIT(REB,[Ô]|[Ô])
Open [Ô]D:\NOVO.txt[Ô] For Binary As #1
Put #1, 1,SEP(2)
[ô]fechamos o arquivo
Close #1
MAIS NAUM CHEGA O ARQUIVO INTEIRO , OUVI FALAR Q TEM COMO MANDAR
BYTE A BYTE MAIS EU NAUM CONSIGO ALGUEM TEM UM EXEMPLO COMENTADO
PASSO-A-PASSO DE COMO FAZER ! OBRIGADO
CLIENTE ->
DIM ARQ AS STRING
Open [Ô]C:\TESTE.TXT[Ô] For Binary As #1
Me.ARQ = Input(LOF(1), 1)
Close #1
WINSOCK.SEND [Ô]TRANS|[Ô] & ARQ
[ô]ISSO MANDANDO
AGORA RECEBENDO
NO EVENTO DATAARRIVAL
DIM SEP AS STRING
DIM REB AS STRING
WINSOCK.GETDATA REB
SEP = SPLIT(REB,[Ô]|[Ô])
Open [Ô]D:\NOVO.txt[Ô] For Binary As #1
Put #1, 1,SEP(2)
[ô]fechamos o arquivo
Close #1
MAIS NAUM CHEGA O ARQUIVO INTEIRO , OUVI FALAR Q TEM COMO MANDAR
BYTE A BYTE MAIS EU NAUM CONSIGO ALGUEM TEM UM EXEMPLO COMENTADO
PASSO-A-PASSO DE COMO FAZER ! OBRIGADO
vi isso na net e lembrei do seu topico
derrepente..
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=59653&lngWId=1
derrepente..
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=59653&lngWId=1
mais naum é bem isso
eu quero a logica de como abrir o arquivo em binario
em mandar de 10 em 10 bytes entendeu
eu quero a logica de como abrir o arquivo em binario
em mandar de 10 em 10 bytes entendeu
minha amiga vc leu o tópico, ele diz extamente isto
vou explicar em portugues o que o tópico que o colega apresentou diz
primeiro vc determina a quantidade de bytes em que o arquivo será quebrado
[ô]Botão enviar
agora o pedido é enviado para o cliente
em seguida, o servidor tem que esperar a resposta do cliente
Este evento é chamado quando os dados chegam ao winsock1
agora a função que realmente envia o arquivo
Esta é outra função de suporte
agora falta a parte do cliente
vou explicar em portugues o que o tópico que o colega apresentou diz
primeiro vc determina a quantidade de bytes em que o arquivo será quebrado
Private Const chunk = 10 [ô]aqui antes quebrava a cada 8000 bytes mas como vc deseja 10 apenas
[ô]Botão enviar
private sub send_click()
[ô]Pega o nome do arquivo
[ô]Função GetFileName usado para obter o nome do arquivo
dim fnamea as string
dim fname as string
if text1.text = [Ô][Ô] then
msgbox [Ô]Por favor, digite o nome do arquivo!!![Ô]
exit sub
end if
fname = text1.text
[ô]Checando se o arquivo existe
If Dir(fname) = [Ô][Ô] Then
MsgBox [Ô]O Arquivo não existe[Ô]
exit sub [ô]Sai da sub se não existir
end if
fnamea=GetFileName(text1.text)
fname=text2.text
dim temp as string
temp= [Ô]rqst[Ô] & fnamea
[ô]SEND
winsock1.senddata temp [ô]enviando arquivo pelo nome
end sub
agora o pedido é enviado para o cliente
em seguida, o servidor tem que esperar a resposta do cliente
Este evento é chamado quando os dados chegam ao winsock1
Private Sub winsock1_dataarrival(ByVal bytestotal As Long)
Dim response As String
Winsock1.GetData response, vbString
Select Case response
Case [Ô]okay[Ô]
send fname [ô]send function is called with file name as argument
Case [Ô]deny[Ô]
MsgBox [Ô]Your request to send the file [Ô] & fname & [Ô] has been denied[Ô], , [Ô]manjit[Ô] [ô]message when request is denied
End Select
End Sub
agora a função que realmente envia o arquivo
Private Sub send(fname As String)
Command2.Enabled = False
Command3.Enabled = False
Text1.Enabled = False
Dim data As String
Dim a As Long
Dim data1 As String
Dim data2 As String
Open fname For Binary As #1
Do While Not EOF(1)
data = Input(chunk, #1)
Winsock1.SendData data
DoEvents
Loop
Winsock1.SendData [Ô]EnDf[Ô]
Close #1
Command2.Enabled = True
Command3.Enabled = True
Text1.Enabled = True
End Sub
Esta é outra função de suporte
Function GetFileName(attach_str As String) As String
Dim s As Integer
Dim temp As String
s = InStr(1, attach_str, [Ô]\[Ô])
temp = attach_str
Do While s > 0
temp = Mid(temp, s + 1, Len(temp))
s = InStr(1, temp, [Ô]\[Ô])
Loop
GetFileName = temp
End Function
agora falta a parte do cliente
Bom agora a parte do cliente
conjunto winsock1 para ouvir uma determinada porta dizer: 165
winsoc2 e se você quiser bate-papo também: 166
winsock1 está escutando na porta 165 e Winsock2 está escutando na porta 166
no lado do cliente
Então, quando chega pedido de ligação
e:
Chegada de dados:
e quando chega dados
Isto irá cuidar de transferência de arquivo agora para o chat:
estaremos usando Winsock2 para bate-papo:
No lado do servidor:
Quando enviar é clicado
Quando os dados chegam
e é isto
conjunto winsock1 para ouvir uma determinada porta dizer: 165
winsoc2 e se você quiser bate-papo também: 166
winsock1 está escutando na porta 165 e Winsock2 está escutando na porta 166
no lado do cliente
Então, quando chega pedido de ligação
private sub winsock1_connectionrequest(byval idrequest as long)
if winsock1.state <> sckConnected then
winsock1.close
winsock1.accept idrequest
end if
end sub
e:
private sub winsock2_connectionrequest(byval idrequest as long)
if winsock2.state <> sckConnected then
winsock2.close
winsock2.accept idrequest
end if
end sub
Chegada de dados:
e quando chega dados
Private Sub winsock1_dataarrival(ByVal bytestotal As Long)
Dim data As String
Dim data4 As String
Dim data2 As String
Dim data3 As String
Dim data5 As String
Dim data6 As String
Winsock1.GetData data, vbString
data2 = Left(data, 4)
Select Case data2
Case [Ô]rqst[Ô] [ô]Solicitação de arquivo chega
data3 = Right(data, Len(data) - (4)) [ô]Pega o noe do arquivo
Dim msg1 As Integer
msg1 = MsgBox(Winsock1.RemoteHost & [Ô] Quer enviar o arquivo[Ô] & data3 & [Ô] aceitar? [Ô], vbYesNo, [Ô]envio de arquivo[Ô])
If msg1 = 6 Then [ô]
Winsock1.SendData [Ô]ok[Ô]
cd.FileName = data3
data5 = Split(data3, [Ô].[Ô])(1)
data6 = [Ô]*.[Ô] & data5
cd.DefaultExt = [Ô](data6)[Ô]
data4 = App.Path & [Ô]\[Ô] & data3
[ô]MsgBox data5
[ô]cd.ShowSave
Open data4 For Binary As #1
Else
Winsock1.SendData [Ô]deny[Ô]
Exit Sub
End If
Case [Ô]EnDf[Ô]
Label1.Caption = [Ô]Tamnho do arquivo recebido : [Ô] & sz & [Ô] Kb[Ô]
size=0
sz=o
Close #1
Case Else
size = size + 1
Label1.Caption = size * 8 & [Ô]Kb Recebidos[Ô]
sz = size * 8
Put #1, , data
End Select
End Sub
Isto irá cuidar de transferência de arquivo agora para o chat:
estaremos usando Winsock2 para bate-papo:
No lado do servidor:
Quando enviar é clicado
Private Sub Command1_Click()
Dim chat As String
chat = Text1.Text
List1.AddItem (chat)
Winsock2.SendData chat
End Sub
Quando os dados chegam
Private Sub winsock2_dataarrival(ByVal bytestotal As Long)
Dim cht As String
Winsock2.GetData cht, vbString
List1.AddItem (cht)
End Sub
e é isto
Tópico encerrado , respostas não são mais permitidas