Cách thực hiện giao tiếp Client Server

Một phần của tài liệu Thử nghiệm truyền file trên máy tính dùng giao thức TCPIP (Trang 50 - 69)

 ứng dụng Server phải thiết lập thông số Localport để Client có thể kết nối đến. Sau đó dùng phơng pháp Listen để lắng nghe yêu cầu đến. Khi có

yêu cầu đến, sự kiện ConnectionRequest xảy ra, dùng thuộc tính Accept để chấp nhận kết nối.

 ứng dụng Client phải thiết lập thông số RemotePort = LocalPort mà Server lắng nghe và phải biết địa chỉ IP hay tên máy Server để gán vào RemoteHost. Sau đó dùng phơng pháp Connect.

 Sau khi đờng kết nối đợc thiết lập, Client và Server có thể dễ dàng trao đổi dữ liệu qua lại, dùng SendData, GetData để gửi và nhận dữ liệu. Sự kiện DataArrival sẽ xảy ra khi có dữ liệu đến.

 Khi đờng truyền đóng lại thì sự kiện Close xảy ra, hoặc khi xảy ra lỗi thì sẽ xuất hiện sự kiện Error.

IV. Thiết kế giao diện và mã lệnh chơng trình 1. From giới thiệu:

Form này chỉ xuất hiện 5 giây sau khi chạy chơng trình ở cả hai bên Client và Server.

2. Form TCPServer

a. Giao diện chơng trình:

Form này xuất hiện sau khi chạy TCPServer. Có menu Thiết lập gồm hai chức năng:

Chức năng 1: Tải tệp tin

Chức năng này dùng để chạy cả TCPClient và TCPServer trên cùng một máy.

Sau khi chọn chức năng này, chơng trình sẽ thông báo “ Đã kết nối”, lúc này ta có thể tải một tệp từ một máy bất kỳ trong mạng LAN bằng cách chọn nút “Chọn tệp tin” để chọn đờng dẫn đến tệp đó, sau đó chọn nơi cần đặt tệp bằng cách chọn nút “Ghi vào”.

Nhấn nút “Tải” để truyền tệp.

Nếu tệp đã có, chơng trình sẽ báo “Tệp đã tồn tại” hoặc nếu ta không chọn đờng dẫn mà tự gõ để sai đờng dẫn thì chơng trình sẽ báo “Tệp không tồn tại”.

Giao diện quá trình truyền tệp nh sau:

Hoàn thành công việc truyền tin, chơng trình sẽ báo “Truyền thành công”. Quá trình truyền ở Server, nếu ta không muốn truyền nữa ta có thể nhấn vào nút “Huỷ kết nối” để huỷ bỏ kết nối đến Client.

Nhấn nút “Thoát” khi không làm việc vơi Form.

Chức năng này dùng để chạy TCPServer và TCPClient trên hai máy khác nhau.

Bên máy khách TCPClient, ta sẽ gõ tên máy chủ và gọi một yêu cầu kết nối. Sau khi cả hai bên đều báo “Đã kết nối”, lúc này tơng tự nh chức năng 1, ở TCP Server ta sẽ tìm đến tệp cần truyền để truyền đến TCPClient.

b. Mã lệnh chơng trình ở Server

Option Explicit 'bao loi khi gap mot bien khong khai bao ' dung cho Client

Dim dk As Byte

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Dim bFileArriving As Boolean Dim sFile As String

Dim sArriving As String '---

Private bSendingFile As Boolean Private lTotal As Long

Private Sub cmdclose_Click() Unload Me

End Sub

Private Sub cmdConnect_Click()

If cmdConnect.Caption = "Nghe" Then Form_Load (adsbygoogle = window.adsbygoogle || []).push({});

'// dong ket noi tcpServer.Close

lblStatus = "Không kết nối" cmdConnect.Caption = "Nghe" End If

End Sub

Private Sub cmdopen_Click() hopthoai.ShowOpen

txtFile.Text = hopthoai.FileName End Sub

Private Sub cmdsave_Click() hopthoai.ShowSave

txtSaveAs.Text = Trim(hopthoai.FileName) + Right(txtFile.Text, 4) End Sub

Private Sub cmdSendanddown_Click() If Dir$(txtFile) = "" Then

MsgBox "Tep khong ton tai!" Else

SendData txtFile, txtSaveAs, tcpServer End If

End Sub

Private Sub Form_Load() dk = 1

' Thiet lap thuoc tinh LocalPort tra ve kieu so nguyen ' sau khi goi phuong thuc Listen.

tcpServer.LocalPort = 100 tcpServer.Listen

'/ tra ve ten Server

Caption = "TCP Server @ " & tcpServer.LocalHostName '// lang nghe o cong

lblStatus = "Đang nghe trên cổng local " & tcpServer.LocalPort & "..." cmdConnect.Caption = "Huỷ kết nối"

End Sub

Private Sub Form_Unload(Cancel As Integer) tcpServer.Close

tcpClient.Close End Sub

Private Sub mnutaiteptin_Click() If dk = 1 Then

mnutaiteptin.Checked = True

If mnutaiteptin.Checked = True Then

'Goi phuong thuc Connect de bat dau mot ket noi tcpClient.Close

tcpClient.RemoteHost = tcpServer.LocalHostName tcpClient.RemotePort = 100

lblStatus = "Đang thử kết nối ở cổng từ xa... " & tcpClient.RemotePort & "..." tcpClient.Connect mnuclient.Enabled = False dk = 0 Else tcpClient.Close mnutaiteptin.Checked = False lblStatus = "Không kết nối"

mnuclient.Enabled = True End If Else mnutaiteptin.Checked = False mnutaiteptin.Enabled = False mnuclient.Enabled = True mnuclient.Checked = True End If End Sub

Private Sub tcpClient_Connect() lblStatus = "Đã kết nối"

End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long) Dim strData As String (adsbygoogle = window.adsbygoogle || []).push({});

Dim ifreefile

DoEvents

tcpClient.GetData strData

If Right$(strData, 7) = "FILEEND" Then bFileArriving = False

lblProgress = "Đang ghi tệp vào: " & App.Path & "\" & sFile sArriving = sArriving & Left$(strData, Len(strData) - 7) ifreefile = FreeFile

If Dir(sFile) <> "" Then MsgBox "Tep da ton tai!!" Else

Put #ifreefile, 1, sArriving Close #ifreefile

ShellExecute 0, vbNullString, App.Path & "\" & sFile, vbNullString, vbNullString, vbNormalFocus

End If

lblProgress = "Truyền thành công!" ElseIf Left$(strData, 4) = "FILE" Then bFileArriving = True

sFile = Right$(strData, Len(strData) - 4) ElseIf bFileArriving Then

lblProgress = "Đang còn " & bytesTotal & " bytes gửi đến" & sFile & " từ địa chỉ " & tcpClient.RemoteHostIP

sArriving = sArriving & strData End If

End Sub

Private Sub tcpServer_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)

'lblProgress.Caption = "Sending File. " & Int(((lTotal - bytesRemaining) / lTotal) * 100) & "% Hoan thanh" ': " & bytesSent & " / " & bytesRemaining

End Sub

Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long) ' Kiem tra neu dieu khien o trang thai dong? Neu khong ,

' dong ket noi truoc khi chap nhan mot ket noi moi If tcpServer.State <> sckClosed Then tcpServer.Close

' Chap nhan yeu cau voi tham so requestID tcpServer.Accept requestID

lblStatus = "Đã kết nối"

cmdConnect.Caption = "Huỷ kết nối" End Sub

Private Sub tcpServer_Close()

'// Xuat hien khi Client dong ket noi cmdConnect.Caption = "Nghe" lblStatus = "Không kết nối" End Sub

Private Sub tcpServer_Connect() lblStatus = "Đã kết nối" End Sub

2. Form TCPClient

a. Giao diện chơng trình:

Đây là giao diện bên TCPClient sau khi chạy chơng trình.

Sau khi gõ tên máy chủ, chọn nút “Tạo kết nối”, cả hai chơng trình sẽ báo “Đã kết nối”, sau đó thực hiện việc truyền tệp ở bên TCPServer đã nói ở trên.

Nhấn nút “Thoát” khi không cần làm việc với Form. (adsbygoogle = window.adsbygoogle || []).push({});

Khi thực hiện chức năng 2, máy chủ đã chấp nhận yêu cầu kết nối và thực hiện việc truyền tệp, giao diện ở TCPClient nh sau:

b. Mã lệnh chơng trình ở Client

Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Dim bFileArriving As Boolean Dim sFile As String

Dim sArriving As String

Private Sub Command1_Click() Unload Me

End Sub

Private Sub Form_Load()

' Ten cua dieu khien Winsock la tcpClient. ' Chu y: de chi dinh mot may chu tu xa, ta co the ' su dung dia chi IP khac (ex: "121.111.1.1") hoac ' ten cua may tinh "friendly",duoc cho thay o day. 'txtServer.SetFocus

Caption = "TCP Client @ " & tcpClient.LocalHostName End Sub

Private Sub cmdConnect_Click()

If cmdConnect.Caption = "Tạo kết nối" Then

' Goi phuong thuc Connect de bat dau mot ket noi tcpClient.Close

tcpClient.RemoteHost = txtServer tcpClient.RemotePort = 100

lblStatus = "Đang thử kết nối tại cổng từ xa... " & tcpClient.RemotePort & "..." tcpClient.Connect

Else

tcpClient.Close

cmdConnect.Caption = "Tạo kết nối" lblStatus = "Không kết nối"

End If End Sub

Private Sub Form_Unload(Cancel As Integer) tcpClient.Close

End Sub

Private Sub tcpClient_Connect() lblStatus = "Đã kết nối"

cmdConnect.Caption = "Huỷ kết nối" End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long) Dim strData As String

Dim ifreefile

tcpClient.GetData strData

If Right$(strData, 7) = "FILEEND" Then bFileArriving = False

lblProgress = "Đang ghi tệp vào " & App.Path & "\" & sFile sArriving = sArriving & Left$(strData, Len(strData) - 7) ifreefile = FreeFile

If Dir(sFile) <> "" Then MsgBox "Tệp này đã có!" Else (adsbygoogle = window.adsbygoogle || []).push({});

Open sFile For Binary Access Write As #ifreefile Put #ifreefile, 1, sArriving

Close #ifreefile

ShellExecute 0, vbNullString, App.Path & "\" & sFile, vbNullString, vbNullString, vbNormalFocus

End If

lblProgress = "Truyền thành công!" ElseIf Left$(strData, 4) = "FILE" Then bFileArriving = True

sFile = Right$(strData, Len(strData) - 4) ElseIf bFileArriving Then

lblProgress = "Đang còn" & bytesTotal & " bytes gửi đến " & sFile & " từ địa chỉ " & tcpClient.RemoteHostIP

sArriving = sArriving & strData End If

End Sub

Private Sub tcpclient_Close()

cmdConnect.Caption = "Tạo kết nối" lblStatus = "Không kết nối"

Kết luận

Với mục đích đã đề ra, đề tài này đã thực hiện đợc các phần sau: - Khái quát chung về mạng máy tính.

- Tìm hiểu về giao thức TCP/IP: mô hình, cách thức hoạt động,… - Mô hình trao đổi thông tin Client - Server.

- ứng dụng lý thuyết trên cài đặt chơng trình truyền nhận file qua card LAN bằng ngôn ngữ Visual Basic 6.0.

Tuy nhiên, do tài liệu về các vấn đề này còn rất ít và điều kiện hạn hẹp về thời gian cũng nh trình độ. Chơng trình chỉ dừng lại ở việc mô phỏng cho lý thuyết đã tìm hiểu ở trên. Vì vậy, tôi rất mong đợc sự đóng góp ý kiến của quý thầy cô và các bạn để đề tài đợc hoàn thiện hơn.

Một lần nữa, tôi xin chân thành cảm ơn đến các thầy cô giáo trong khoa Công nghệ thông tin, đặc biệt là sự hớng dẫn nhiệt tình của thầy giáo

ThS Nguyễn Quang Ninh cùng tất cả ngời thân, bạn bè đã động viên, giúp đỡ tôi hoàn thành đề tài này./.

Tài liệu tham khảo

[1]. Nguyễn Thúc Hải - Mạng máy tính và các hệ thống mở, NXB Giáo Dục, 1999.

[2]. Nguyễn Thị Ngọc Mai - Microsoft Visual Basic 6.0 & Lập trình cơ sở dữ liệu, NXB Lao Động - Xã Hội, 1999.

[3]. Tim Parker - Teach Yourself TCP/IP in 14 Days, Second Edition,

Sams Publishing, 1996.

[4]. Grace Buechlein - Acquisitions Editor, Sams Publishing, 1994 .

[5]. Dean Miller - Publishing Team Leader, Sams Publishing, 1996.

[6]. Hyper link:

http://pclt.cis.yale.edu/pclt/comm/tcpip.htm

http://www.ncsa.uiuc.edu/people/vwelch/net.perf/tcp.window.html

http://www.sockets.com

Mục lục (adsbygoogle = window.adsbygoogle || []).push({});

Trang

Lời nói đầu 1

Chơng I: Tổng quan về mạng máy tính 3

I. Giới thiệu chung về mạng 3

1. Lịch sử hình thành và phát triển 3

2. Mạng máy tính 4

a. Lý do phát triển mạng máy tính 4

b. Khái niệm mạng máy tính 5

c. Các yếu tố cần thiết khi quyết định triển khai mạng máy tính 6

II. Các loại mạng thông dụng 6

1. Phân loại theo cách sử dụng tài nguyên trên mạng 6

a. Mạng Peer to Peer 6

b. Mạng Server Based 7

2. Phân loại theo kiến trúc (topologies) của mạng 7

a. Kiến trúc tuyến (Bus) 7

b. Kiến trúc sao (Star) 8

c. Kiến trúc vòng (Ring) 8

d. Kiến trúc hỗn hợp 9

3. Phân loại theo quy mô địa lý của mạng 9

a. Mạng cục bộ LAN 9

b. Mạng đô thị MAN 9

c. Mạng diện rộng WAN 9

4. Phân loại theo kỹ thuật chuyển mạch 10

a. Mạng chuyển mạch kênh 10

b. Mạng chuyển mạch thông báo 10

c. Mạng chuyển mạch gói 11

Chơng II: tìm hiểu giao thức TCp/ip 13

I. Tìm hiểu chung về giao thức giao tiếp 13

1. Khái niệm 13 (adsbygoogle = window.adsbygoogle || []).push({});

2. Những vấn đề khi thiết kế các lớp 13

II. Mô hình TCP/IP 14

1. Căn bản về TCP/IP 14

2. Mô hình TCP/IP 14

3. Phân biệt TCP, IP và UDP 18

a. IP - Giao thức liên mạng 18

b. TCP - Giao thức điều khiển truyền tin 19

c. Giao thức UDP 25

4. Cấu trúc địa chỉ IP 27

a. Thành phần và hình dạng của địa chỉ IP 27

Chơng III: Mô hình Client - Server 31

I. Những giải thuật trong thiết kế phần mềm Client 32

1. Giải thuật tạo kết nối với Server và giao tiếp với nó 33

2. Giải thuật lập trình cho TCP Client 34

II. Những giải thuật trong thiết kế phần mềm Server 35

1. Các loại Server cơ bản là: 37

a. Giải thuật cho Server tuần tự, có kết nối 38

b. Giải thuật cho Server tuần tự, không kết nối 39

c. Giải thuật cho Server đồng thời, không kết nối 40

d. Giải thuật cho Server đồng thời, có kết nối 40

2. Cách dùng mỗi loại Server 42

3. Khái niệm Server bị Block 43

III. Tính đồng thời ở Client 44

IV. Mô hình áp dụng 46

Chơng iv: cài đặt chơng trình 47 I. Ngôn ngữ cài đặt chơng trình 47

II. Giới thiệu chung về công cụ Winsock 47

1. Các thuộc tính (Properties) của Winsock 48

2. Các phơng thức (Methods) 48

3. Các sự kiện (Events) 49

4. Các loại Frame 50 (adsbygoogle = window.adsbygoogle || []).push({});

III. Cách thực hiện giao tiếp Client - Server 51

IV. Thiết kế giao diện và modul chơng trình 52

1. Form Giới thiệu 52

2. Form TCPServer 53

a. Giao diện chơng trình 53

3. Form TCPClient 60

a. Giao diện chơng trình 60

b. Mã lệnh chơng trình ở Client 61

Kết luận 64

Tài liệu tham khảo 65

Một phần của tài liệu Thử nghiệm truyền file trên máy tính dùng giao thức TCPIP (Trang 50 - 69)