Đồ án Xây dựng chương trình chat camera trong mạng LAN

MỤC LỤC

LỜI CẢM ƠN. 1

MỤC LỤC 2

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN 4

1.1 Tìm hiểu lập trình mạng với C# 4

1.1.1 Tổng quan về C# 4

1.1.2 Cấu trúc của C# 4

1.1.3 Lập trình mạng với C# 4

1.1.4 Lập trình với C# Socket Helper Classes 5

1.1.5 Lập trình với Thread 7

CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 8

2.1 Cấu trúc chung của chương trình. 8

2.2 Phân tích và thiết kế hệ thống 8

2.2.1 Thiết kế các module 8

2.2.1.1 Module 1 (ListenRequest) 8

2.2.1.2 Module 2 (ConnectToServer) 9

2.2.1.3 Module 3 (SendListUser) 9

2.2.1.4 Module 4 (SendCamera) 9

2.2.1.5 Module 5 (DisplayCamera) 9

2.2.2 Phân tích các lớp 9

CHƯƠNG 3: CHƯƠNG TRÌNH THỰC NGHIỆM 13

3.1 Giao diện chương trình 13

3.1.1 Giao diện chương trình Server 13

3.1.2 Giao diện chương trình Client 13

3.2 Kết quả. 15

3.3 Nhận xét. 15

KẾT LUẬN. 16

TÀI LIỆU THAM KHẢO. 16

 

 

doc18 trang | Chia sẻ: lynhelie | Lượt xem: 2345 | Lượt tải: 4download
Bạn đang xem nội dung tài liệu Đồ án Xây dựng chương trình chat camera trong mạng LAN, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LỜI CẢM ƠN. Trước tiên, em xin bày tỏ lòng biết ơn chân thành và sâu sắc tới thầy giáo Đỗ Xuân Toàn, đã tận tình chỉ bảo và giúp đỡ em hoàn thành luận văn này. Bên cạnh đó em cũng xin chân thành cảm ơn các thầy giáo, cô giáo trong khoa Công Nghệ Thông Tin của trường Đại học Dân lập Hải Phòng, những người đã truyền thụ cho em những kiến thức quý báu, giúp em có một hành trang vững chắc để bước vào cuộc sống mới sau bốn năm học tập tại trường, đồng thời cũng tạo mọi điều kiện thuận lợi để em hoàn thành luận văn tốt nghiệp. Dưới đây là những gì mà em đã tìm hiểu và nghiên cứu được trong thời gian vừa qua. Do tính thực tế và kiến thức còn hạn chế. Vì vậy em rất mong nhận được sự chỉ bảo của các thầy cô giáo và sự tham gia đóng góp ý kiến của các bạn để em có thể hoàn thành tốt đề tài của mình. Em xin chân thành cảm ơn! Hải phòng, Ngày 20 háng 7 năm 2008 Sinh viên thực hiện Lê Thị Thu Linh MỤC LỤC MỞ ĐẦU Cùng với sự phát triển chung của toàn xã hội, công nghệ thông tin cũng từng bước phát triển và được ứng dụng rộng rãi trong thực tế, từ trường học, các cơ quan nhà nước cho đến các doanh nghiệp.Như ta đã biết sự phát triển đó có sự đóng góp không nhỏ của mạng máy tính đặc biệt là mạng Internet. Hiện nay con người có thể trao đổi thông tin với nhau thông qua các dịch vụ như: chatyahoo, email,... Bên cạnh đó mạng LAN cũng được ứng dụng rộng rãi phục vụ nhu trao đổi thông tin. Nhu cầu trao đổi thông tin ngày càng đa dạng hơn không những có thể nghe được tiếng nói mà còn muốn nhìn thấy nhau. Chat Camera là một ứng dụng của mô hình mạng LAN. Chat camera là một chương trình giúp con người có thể trao đổi hình ảnh với nhau. Chat camera đáp ứng đầy đủ nhu cầu về hình ảnh và kinh tế. Chương trình rất dễ triển khai trong thực tế vì chỉ cần cơ quan, doanh nghiệp có hệ thống mạng LAN và thiết bị camera(webcam). Chương trình được xây dựng trên ngôn ngữ lập trình C# với Socket. Luận văn được chia ra 3 chương: Chương 1 Giới thiệu tông quan. Chương 2 Phân tích thiết kế hệ thống Chương 3 Chương trình thực nghiệm GIỚI THIỆU TỔNG QUAN Tìm hiểu lập trình mạng với C# Tổng quan về C# - C# là một ngôn ngữ lập trình hướng đối tượng. Cấu trúc và lập luận của C# có đầy đủ các đặc tính của một ngôn ngữ lập trình hướng đối tượng trước đó (C++, Java). C# được thiết kế dùng cho nền .NET framework, một công nghệ mới và đầy triển vọng trong việc phát triển các ứng dụng hệ thống và mạng internet Cấu trúc của C# Một chương trình C# bao gồm các thành phần như sơ đồ dưới đây: Lập trình mạng với C# C# là một ngôn ngữ hỗ trợ lập trình mạng rất mạnh. Trong C#, có nhiều lớp đối tượng đã được xây dựng sẵn để hỗ trợ lập trình ứng dụng mạng như socket, TCPListener, a. Lập trình với Socket Sau đây là những thành phần hỗ trợ lập trình socket trong C#: Địa chỉ IP trong C# IPAddress IPEndPoint IPAddress Một đối tượng IPAddress được sử dụng để trình bày một địa chỉ IP đơn. Giá trị này sau đó có thể được sử dụng trong một vài phương thức của socket để trình bày địa chỉ IP. Định dạng này cho phép bạn chuyển đổi một chuỗi thể hiện địa chỉ IP theo cách viết thông dụng thành một đối tượng IPAddress. IPEndPoint .NET Framework sử dụng đối tượng IPEndPoint để trình bày một bộ (một đầu socket) IP address/(TCP hoặc UDP)port. Một đối tượng IPEndPoint được sử dụng khi nối kết những sockets tới địa chỉ cục bộ, hoặc khi kết nối sockets tới một địa chỉ ở xa. IPEndPoint(long address, int port) IPEndPoint(IPAddress address, int port) Sử dụng C# socket Hạt nhân của namespace System.Net.Sockets là lớp Socket. Nó cung cấp cho trình quản lý C# đoạn mã thực thi của Winsock API. Socket(AddressFamily af, SocketType st, ProtocolType pt) AddressFamily để định nghĩa kiểu mạng. SocketType để định nghĩa kiểu dữ liệu của kết nối. ProtocolType định nghĩa giao thức mạng Lập trình với C# Socket Helper Classes .NET Framework hỗ trợ giao diện socket nó cũng cung cấp một giao diện đơn giản hơn giúp cho việc lập trình mạng trở nên dễ dàng hơn. Có 3 lớp đối tượng được sử dụng cho việc lập trình mạng với giao diện mới này là: TcpClient TcpListener UdpClient Mỗi lớp được thiết kế để hỗ trợ một socket đặc biệt phục vụ cho một chức năng của chương trình và giao diện lập trình trở nên đơn giản hơn cho các chức năng đó. Rõ ràng, lớp TcpClient và TcpListener được sử dụng cho việc tạo các chương trình TCP client và server; lớp UdpClient được sử dụng để tạo các chương trình UDP. Tcp Client Những phương thức của lớp TcpClient được sử dụng để tạo những chương trình network client theo mô hình hướng kết nối. +Sử dụng phương thức Connect() +Sử dụng EndPoint + Kết nối trực tiếp không cần sử dụng phương thức Connect() Phương thức GetStream() được sử dụng để tạo ra một đối tượng NetworkStream cho phép bạn gửi và nhận các byte trên socket. Khi bạn có một thực thể NetworkStream cho socket, nó là một sự tách biệt để sử dụng dòng dữ liệu chuẩn để thông qua các phương thức Read() và Write() để di chuyển dữ liệu vào và ra trên một socket: TcpListener Lớp TcpClient đơn giản là một client socket dành cho chương trình Client, lớp TcpListener đơn giản là dành cho chương trình server (một server socket); Những constructors của lớp này cũng đơn giản tương tự. Có 3 constructor có khuôn dạng như sau: TcpListener(int port) nối kết tới một cổng cục bộ TcpListener(IPEndPoint ie) kết nối tới một EndPoint cục bộ TcpListener(IPAddress addr, int port) kết nối tới một IPAddress và cổng cục bộ Ba khuôn dạng trên cho phép bạn tạo ra các đối tượng TcpListener. Khi một đối tượng đã được tạo, bạn có thể bắt đầu lắng nghe cho kết nối mới bằng cách sử dụng phương thức Start(). UdpClient Đối với những ứng dụng yêu cầu một socket không hướng nối, lớp UdpClient cung cấp một giao diện đơn giản cho UDP sockets. Chúng ta đều biết rằng UDP là một giao thức không kết nối, do đó nó không giống như ứng dụng client – server, chỉ có những UDP socket đợi để truyền dữ liệu. Chúng ta không cần kết nối UDP socket tới một địa chỉ đặc biệt và chờ nhận dữ liệu. Lập trình với Thread Khi xây dựng các ứng dụng Server ta luôn muốn nó phải đáp ứng được cho nhiều Client, do đó mỗi ứng dụng Server cần có nhiều SocketClient và chúng ta sẽ phải thực hiện chúng đồng thời. Nhưng phương thức Receive() trên mỗi SocketClient sẽ rơi vào trạng thái chờ đợi khi không có dữ liệu trên kết nối mà nó quản lý và vì vậy khi một kết nối đang được xử lý không có dữ liệu các kết nối khác sẽ bị khóa. Để giải quyết vấn đề này C# cung cấp công cụ lập trình Thread. Lớp .NetFramework's ProcessThread. Lớp .NET ProcessThread trong namespace System.Diagnostics cho phép bạn truy nhập các thread trong phạm vi một tiến trình từ chương trình C# của bạn. Lớp ProcessThread bao gồm nhiều thuộc tính và phương thức được sử dụng để đạt được thông tin về các thread trong một tiến trình. thi. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG Cấu trúc chung của chương trình. Chương trình chat canera chia làm hai module chính. Một là module Server, hai là moduel Client. Module Server có nhiệm vụ lắng nghe các kết nối từ Client thông qua cổng. Đồng thời Server phải gửi danh sách các Client đã kết nối đến Server cho các Client có yêu cầu. Còn module Client thì có nhiệm vụ kết nối đến Server thông qua địa chỉ IP của Server. Khi kết nối thành công thì các Client có thể yêu cầu Server gửi danh sách các Client kết nối đến cho nó. Lúc đó các Client có thể chat camera với nhau. Module Server và module Client gồm các modulesau : Module Server : - ListenRequest: Lắng nghe kết nối đến Server. - SendListUser : Gửi danh sách các Client kết nối đến Server. Module Client : - DisplayCamera: Hiển thị hình ảnh - ConnectToServer: Kết nối đến Server - SendCamera: Truyền camera Phân tích và thiết kế hệ thống Thiết kế các module Module 1 (ListenRequest) Quản lý và lắng nghe các yêu cầu từ Client (Server) để tạo các kết nối từ Client tới Server và tạo ra các kết nối riêng cho các Client có thể trao đổi với nhau. Module này cho phép ta kết nối 2 máy tính lại với nhau thông qua một địa chỉ cổng (Port) hoặc thông qua địa chỉ IP. Module 2 (ConnectToServer) Module này có nhiệm vụ thực hiện yêu cầu kết nối (Client) để thiết lập kết nối từ Client tới Server. Khi kết nối được thành lập ta có thể tiến hành trao đổi thông tin giữa hai máy tính. Module 3 (SendListUser) Module 4 có nhiệm vụ gửi danh sách các Client đang kết nối đến Server cho các Client có yêu cầu. Tạo kết nối riêng giữa các Client với Client. Đây chính là cách để các Client có thể chat camera với nhau. Module 4 (SendCamera) Khi các Client cùng kết nối đến Server. Lúc này các Client có thể truyền và nhận camera với nhau. Trong khi hai Client đang chat camera mà một trong hai Client có một Client thoát khỏi kết nối đến Server thì cũng kết thúc quá trình truyền nhận camera. Module 5 (DisplayCamera) Module trên thì module 6 có nhiệm vụ nhận thông tin từ kết nối riêng và hiển thị nó lên màn hình. Phân tích các lớp a. Mô tả lớp đối tượng ListenRequest ListenRequest Properties: Socket, IPAddress addr, int port, IPEndPoint Methods: TcpListener ,Start() TcpListen đơn giản là dành cho chương trình server (một server socket). bạn có thể bắt đầu lắng nghe cho kết nối mới bằng cách sử dụng phương thức Start().Phương thức AcceptSocket() dùng để chấp nhận một yêu cầu kết nối từ Client. Khi kết nối được thành lập, phương thức GetStream() được sử dụng để tạo một đối tượng NetworkStream để đọc và viết dữ liệu tới socket đã được kết nối. Trong đó: int port : nối kết tới một cổng cục bộ IPEndPoint : kết nối tới một EndPoint cục bộ IPAddress addr, int port : kết nối tới một IPAddress và cổng Lớp Socket dùng để tạo ra một socket lắng nghe trên cổng. Socket này sử dụng phương thức Parse() để tạo thực thể IPAddress. Phương thức Broadcast Sử dụng để trình bày địa chỉ broadcast trong LAN. b. Mô tả lớp đối tượng Send ListUser SendListUser Properties: Socket, int port, IPEndPoint, String Methods: Send Khi các Client kết nối đến Server, lúc đó Server ghi lại các kết nối đó và gửi danh sách đó cho Client yêu cầu. c. Mô tả lớp đối tượng ConnectToServer ConnectToServer Properties: True, false Methods: Connect() Phương thức Connect() dùng để kết nối đến địa chỉ trong mạng. Khi một thực thể TcpClient được tạo ra, bạn sẽ chắc chắn muốn gửi và nhận dữ liệu với nó. Phương thức GetStream() được sử dụng để tạo ra một đối tượng NetworkStream cho phép bạn gửi và nhận các byte trên socket. Khi bạn có một thực thể NetworkStream cho socket, nó là một sự tách biệt để sử dụng dòng dữ liệu chuẩn để thông qua các phương thức Read() và Write() để di chuyển dữ liệu vào và ra trên một socket. d. Mô tả lớp đối tượng DisplayCamera Để đọc và hiện thị hình ảnh nhận được từ camera sử dụng thư viện WebCam_Capture.dll. - Đầu tiên các bạn phải tạo một cửa sổ để quản lý thông qua hàm API capCreateCaptureWindow(). - Để hiển thị hình ảnh ta cần thực hiện kết nối cửa sổ chụp thông qua hàm capDriverConnect(): fOK= capDriverConnect(hWndC,0) hWndC: định danh của cửa sổ. 0 lấy giá trị mặc định hàm trả về true nếu thành công và trả về false thì ngược lại. - Hiển thị hình ảnh. capPreview(hWndC, TRUE) ; // bắt đầu hiển thị. e. Mô tả lớp đối tượng SendCamera SendCamera Properties: Image, socket int port, IPEndPoint Methods: SendTo Muốn truyền camera thì ta phải sử dụng đối tượng SendCamera. Khi có yêu cầu SendCamera thì phải tạo kết nối đến địa chỉ của socket thông qua cổng (int port,IPEndPoint). Tiếp theo ta phải sử dụng Image và cuối cùng sử dụng phương thức SendTo để truyền đi. Thiết kế các lớp ChatServer Properties: Public: const int CAM_PORT = 39000; const int MAX_CLIENTS = 20; public AsyncCallback pfnWorkerCallBack; private Socket m_mainSocket; private Socket[] m_workerSocket = new Socket[MAX_CLIENTS]; public String name; public String ip; public bool connect=false ; UserInfo[MAX_CLIENTS]; private Thread myth; Methods: Private: void UpdateControls(bool listening) void RemoveUser() void AddUserList() void button1_Click(object sender, EventArgs e) void button2_Click(object sender, EventArgs e) void OnClientConnect(IAsyncResult asyn) void SendUserList() void WaitForData(System.Net.Sockets.Socket soc) void OnDataReceived(IAsyncResult asyn) Thiết kế lớp Server Thiết kế lớp Client Thiết kế lớp ChatClient Properties: AsyncCallback m_pfnCallBack; Socket m_clientSocket; const int MAX_CLIENTS=20; const int CAM_PORT = 39000; delegate void SetListBoxCallback(); String szData; private Thread myth; TcpListener cam_listen; Methods: Private: void button2_Click(object sender, EventArgs e) void UpdateControls(bool connected) void button1_Click(object sender, EventArgs e) public: void WaitForData() void OnDataReceived(IAsyncResult asyn) void UpdateListUser() void listBox1_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) void WaitCam() Thiết kế lớp ChatCam ChatCam Properties: Private: socket r ; thread t ; TcpClient myclient; MemoryStream ms; NetworkStream myns; BinaryWriter mysw; Thread myth; TcpListener mytcpl; Socket mysocket; NetworkStream ns; String remote_IP; Methods: private: static void Main() ; void ChatCam_Load(object sender, EventArgs e) void Start_Receiving_Video_Conference() CHƯƠNG TRÌNH THỰC NGHIỆM Giao diện chương trình Giao diện chương trình Server Giao diện chương trình Server khi chưa có một Client nào kết nối đến Server. Muốn Server lắng nghe ta kích chuột vào nút Start và kết thúc thì sử dụng nút Stop. Đây là giao diện chương trình Server khi lắng nghe Giao diện chương trình Client Giao diện Client khi chưa kết nối. Khi muốn kết nối người dùng phải gõ địa chỉ IP và kích vào nút Connect muốn kết thúc sử dụng Disconnect. Đây là giao diện Client khi đang thực hiên Connect Giao diện chương trình khi sử dụng chat camera giữa hai Client Kết quả. Luận văn đã đạt được các kết quả sau : Xây dựng được một ứng dụng Server-Client cho phép nhiều người có thể chat camera với nhau trên mạng LAN. Tìm hiểu kỹ thuật truyền những thông tin có độ trễ thời gian thực. Nhận xét. Ứng dụng Client/Server trong việc kết nối cũng như phục vụ cho việc trao đổi dữ liệu và quản lý trong mạng LAN. Chương trình chat camera đạt kết quả tốt trong môi trường mạng có hệ thống m ạng LAN và thiết bị camera có chất lượng cao. Xây dựng chương trình trên ngôn ngữ lập C# với Socket đặc biệt là tầng WindowApplication. Chương trình có thể đáp ứng nhu cầu chat camera cho nhiều máy trong mạng mà không ảnh hưởng đến chất lượng hình ảnh. KẾT LUẬN. Khóa luận trình bày xây dựng chương trình chat camera trên mạng LAN. Một số vấn đề được nghiên cứu và thử nghiệm. Về lý thuyết tìm hiểu khái quát về ngôn ngữ lập trình C#. Trên cơ sở đó tìm hiểu về phương pháo lập trình C# với Socket. Về thực nghiệm tìm hiểu cấu trúc và cách xây dựng chương trình chat camera. Hướng phát triển tiếp theo của đề tài là xây dựng chương trình ứng dựng trên mạng diện rộng. Tuy nhiên do hạn chế về điều kiện và thời gian, khoá luận sẽ không thể tránh khỏi những thiếu xót. Kính mong được sự đóng góp ý kiến của thầy cô và các bạn, để em có thể hoàn thiện tốt hơn đề tài nghiên cứu của mình trong đợt khoá luận này. TÀI LIỆU THAM KHẢO. [1] Richard Blum, C# Network Programming, Sybex © 2003, ISBN:0782141765 [2] Kỹ thuật lập trình C#, Biên dịch từ cuốn Professional C#, 2nd Edition, Xuất bản bởi Wrox Press Ltd. [3] Andy Harris, Microsoft C# Programming for the Absolute Beginner, Premier Press © 2002, ISBN: 1931841160

Các file đính kèm theo tài liệu này:

  • docBao cao tot tom tat_linh.doc
  • pptBAOCAO1.ppt