PDA

View Full Version : Help me!!Bác nào cao thủ giúp em cái giao tiếp giữa hai máy tính qua cổng com


tcoi001
26-02-2009, 09:35 PM
Bác nào cao thủ giúp em với.
Em đang làm đề tài về truyền thông giữa hai máy tính qua cổng Com.Yêu cầu truyền kí tự và truyền file,giao diện tiếng việt.Em thử chạy chương trình bằng cách nối chân 2 và 3 của 1 máy tính lại để kiểm tra.Sau khi tìm kiếm và ngâm cứu code trên mạng em đã làm được phần truyền kí tự còn phần truyền file thì mắc phải 1 vấn đề là:file sau khi truyền rồi save lại thì khi mở file đã save ra thì file này không có dữ liệu.Bác nào biết lỗi hay thiếu xót ở đâu xin chỉ giáo dùm em.Em xin gửi code ở dưới đây để các bác dễ bề xem xét.

CODE

Private Sub Command1_Click()
On Error GoTo OpenFalse
If MSComm1.PortOpen = False Then 'PortOpen=true: mo cong;false :dong cong
MSComm1.PortOpen = True
End If
Exit Sub
OpenFalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, khong the mo cong. Hay dong cac ung dung dang su dung cong COM"

End Sub

Private Sub Command2_Click()
If MSComm1.PortOpen = True Then 'co cung duoc ko cung ko sao
MSComm1.PortOpen = False
End If
End
End Sub

Private Sub Command3_Click()
On Error GoTo sendfalse
MSComm1.Output = Trim(Text1.Text)
Text1.Text = ""
Exit Sub
sendfalse:
MsgBox "Loi, Cong COM chua duoc mo"
End Sub

Private Sub Command4_Click()
Text2.Text = ""
End Sub

Private Sub Command5_Click()
Cdlg.DialogTitle = "Send file..."
Cdlg.Filter = "Textfile (*.TXT)|*.txt|All Files (*.*)|*.*"
Cdlg.InitDir = App.Path
Cdlg.FileName = ""
Cdlg.ShowOpen
Text1.Text = Cdlg.FileName
Label1.Caption = Str(Round(FileLen(Text1.Text) / 1024, 2)) + "KB"
Exit Sub
Loi:
Label1.Caption = "0 KB"
Text1.Text = ""
Text2.Text = "Da truyen file qua cong COM1 thanh cong"
' goi ham truyen file
If Cdlg.FileName <> "" Then SendFile (Cdlg.FileName)
End Sub

Private Sub Command6_Click()
FileReceive = FreeFile
ReceiveFlag = True
Timer1.Enabled = False
Do
Cdlg.FileName = ""
Cdlg.ShowSave
If Trim(Cdlg.FileName) = "" Then
MsgBox "File name error!!"
End If
Loop While Trim(Cdlg.FileName) = ""
Text2.Text = Cdlg.FileName
MSComm1.Output = "RECEIVE" + vbCr
Open Trim(Text2.Text) For Output As FileReceive
End Sub

Private Sub Form_Load()
With MSComm1
.Settings = "9600,N,8,1"
.RThreshold = 1 'su kien OnComm xay ra khi bat kì kí tu nào duoc chuyen den bo dem nhan.
.Handshaking = comNone
.SThreshold = 0
.InBufferSize = 1024
.OutBufferSize = 1024
.InputMode = comInputModeText 'quyet dinh dang du lieu nhan duoc la dang text
.InputLen = 0
.CommPort = 1 'thiêt lâp và tra vê tên cua công giao tiêp la cong COM1
End With
End Sub

Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = comEvReceive) Then
Text2.Text = Text2.Text + MSComm1.Input
End If
End Sub
' ham truyen File
Function SendFile(tmp$)
Dim temp$
Dim hsend, bsize, LF&

' mo file
Open tmp$ For Binary Access Read As #2
' kiem tra kich thuoc Mscomm1 OutBuffer
bsize = MSComm1.OutBufferSize
' kiem tra kich thuoc File
LF& = LOF(2)

' code nay se chia du lieu thanh nhung fan nho(Buffer sized)
' va gui chung di

Do Until EOF(2)

If LF& - Loc(2) <= bsize Then
bsize = LF& - Loc(2) + 1
End If

' tao vung chua du lieu
temp$ = Space$(bsize)

' dat du lieu vao bien Temp$ dang string
Get #2, , temp$

MSComm1.Output = temp$

Do
ret = DoEvents()
' cho den khi buffer trong
Loop Until MSComm1.OutBufferCount = 0
Loop

' dong file
Close #2

End Function

Em viết có hơi dài dòng là do em chưa có kinh nghiệm máy tính nên không biết gửi hẳn file bài lập trình bằng VB của mình.Mong các bác thông cảm.Mong sớm nhận được sự giúp đỡ của các bác.Các bác có thể gửi tài liệu giúp đỡ vào mail:"truongtrung8730@yahoo.com.vn"
Thân!