Nghiên cứu ứng dụng mô hình P2P vào các ứng dụng client server Nghiên cứu ứng dụng mô hình P2P vào các ứng dụng client server Nghiên cứu ứng dụng mô hình P2P vào các ứng dụng client server luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI DƯƠNG HỮU TÙNG NGHIÊN CỨU ỨNG DỤNG MÔ HÌNH P2P VÀO CÁC ỨNG DỤNG CLIENT SERVER LUẬN VĂN THẠC SỸ KHOA HỌC KỸ THUẬT MÁY TÍNH VÀ TRUYỀN THÔNG NGƯỜI HƯỚNG DẪN KHOA HỌC PGS.TS HÀ QUỐC TRUNG Hà Nội – 2014 LỜI CAM ĐOAN Tôi là:Dương Hữu Tùng, học viên cao học lớp 11BMTTT.KH khóa 2011 2013 Thầy giáo hướng dẫn PGS.TS Hà Quốc Trung Tơi xin cam đoan tồn nội dung trình bày luận văn “Nghiên cứu ứng dụng mô hình P2P vào ứng dụng client server” kết tìm hiểu nghiên cứu riêng tơi hướng dẫn PGS.TS Hà Quốc Trung Các kết liệu nêu luận văn hồn tồn trung thực rõ ràng Mọi thơng tin trích dẫn tuân theo luật sở hữu trí tuệ, liệt kê rõ ràng tài liệu tham khảo Tơi xin chịu hồn tồn trách nhiệm với nội dung viết luận văn Hà nội, ngày tháng năm 2014 LỜI CẢM ƠN Tôi xin gửi lời cám ơn sâu sắc tới PGS.TS Hà Quốc Trung, người tận tình hướng dẫn để tơi hồn thành luận văn Tơi xin gửi lời cám ơn chân thành tới quý thày cô viện Công nghệ thông tin Truyền thông, Viện Đào tạo sau đại học truyền dạy kiến thức q báu khố học Cuối cùng, tơi xin gửi lời cám ơn tới gia đình, bạn bè, quan cơng tác giúp đỡ q trình thực luận văn Hà Nội, ngày tháng năm 2014 Học viên Dương Hữu Tùng MỤC LỤC DANH MỤC HÌNH VẼ CHƯƠNG TỔNG QUAN CHƯƠNG CƠ SỞ LÝ THUYẾT 12 2.1 Mơ hình client/server 12 2.1.1 Khái niệm 12 2.1.2 Các kiến trúc Client/Server 15 2.2 Mơ hình peer to peer 17 2.2.1 Khái niệm 17 2.2.2 Phân loại mạng ngang hàng 19 2.3 So sánh mơ hình P2P với mơ hình Client/Server 21 2.4 Vấn đề cần giải 22 2.5 Định hương giải pháp 24 2.5.1 Mơ hình Local Proxy 24 2.5.2 Mô hình share cache model 25 CHƯƠNG THIẾT KẾ ỨNG DỤNG VIDEO STREAMING SỬ DỤNG LOCAL PROXY 3.1 Giới thiệu toán 28 3.2 Mô tả video streaming client server 28 28 3.2.1 Kiến trúc server 29 3.2.2 Kiến trúc client 30 3.3 Mô tả video streaming sử dụng P2P 31 3.4 Chức hệ thống video streaming 32 3.5 Thiết kế chi tiết hệ thống video streaming 34 3.5.1 Đăng ký người dùng 34 3.5.2 Đăng nhập 35 3.5.3 Danh sách đoạn video có 37 3.5.4 Gửi video 38 3.5.5 Hiển thị video 40 3.5.6 Thêm đoạn video 41 3.5.7 Đăng xuất 42 3.6 Cài đặt, thử nghiệm đánh giá 43 KẾT LUẬN 46 TÀI LIỆU THAM KHẢO 47 DANH MỤC HÌNH VẼ Hình 2.1 Mơ hình client server 13 Hình 2.2 Q trình gửi tin mơ hình client server 14 Hình 2.3 Kiến trúc client server tầng 16 Hình 2.4 Kiến trúc client server tầng 16 Hình 2.5 Mơ hình mạng ngang hàng 17 Hình 2.6 Phân loại mạng ngang hàng 19 Hình 2.7 Mơ hình local proxy 24 Hình 2.8 Mơ hình share cache model 25 Hình 3.1 Mơ hình client server 29 Hình 3.2 Mơ hình kiến trúc server-client 30 Hình 3.3 Đăng ký người dùng 34 Hình 3.4 Quy trình đăng nhập 36 Hình 3.5 Qui trình gửi video 38 Hình 3.6 Quy trình hiển thị đoạn video 40 Hình 3.7: Quy trình thêm đoạn video 42 DANH MỤC BẢNG Bảng 3.1 Quy trình đăng kí người dùng 35 Bảng 3.2 Quy trình đăng nhập 37 Bảng 3.3 Quy trình gửi video 39 Bảng 3.4 Quy trình hiển thị đoạn video 41 Bảng 3.5 Quy trình thêm video 42 BẢNG CHỮ VIẾT TẮT P2P Peer to Peer DHT Distributed Hash Table VOD Video On Demand LP Local Proxy CHƯƠNG TỔNG QUAN Các ứng dụng dựa tảng client-server mạng ngày phổ biến Tuy nhiên số ứng dụng cần thao tác với liệu lớn hay đòi hỏi nhiều tính tốn, xử lí phức tạp streaming audio, video, mơ hình client-server gặp nhiều bất cập, đặc biệt số lượng người dùng đồng thời tăng, biểu dạng tải máy chủ, trễ tín hiệu, việc xem video mạng gần điều Ngày nay, với bùng nổ Internet, ứng dụng đa phương tiện có video streaming trở thành nhu cầu thiếu nhiều cư dân mạng Theo thống kê, riêng Mỹ có khoảng 33,5 tỉ video xem tháng 12-2012 (nguồn comScore) Con số đủ cho ta thấy lớn mạnh không ngừng ứng dụng video streaming Video loại liệu đa phương tiện quan trọng phục vụ cho truyền thơng cho nhu cầu giải trí người nhiều thập niên Trong thời kỳ đầu video xử lý truyền dạng tín hiệu tương tự (analog) Với phát triển không ngừng mạch điện tử máy tính dẫn đến số hóa video mở cách mạng nén truyền thông video Sự phát triển phổ biến Internet năm 90 định hướng truyền thông video qua mạng chuyển mạch gói best – effort Video qua mạng Internet gặp phải nhiều yếu tố bất lợi băng thơng, độ trễ gói tin, với số vấn đề làm để chia tài nguyên mạng luồng hay làm triển khai hiệu phương thức truyền thơng – nhiều Từ có nhiều giải pháp nghiên cứu phát triển nhằm khắc phục vấn đề Video Streaming định nghĩa “dòng chảy” video, nghĩa liệu video truyền liên tục từ nguồn đến đích thơng qua Internet Video Streaming thường sử dụng lĩnh vực giải trí dạy học, dùng để lưu trữ tập tin Video học, cung cấp cho người dùng tiện ích tìm kiếm, liệt kê khả hiển thị hiển thị lại liệu Video theo yêu cầu.Với định dạng tập tin Video truyền thống, liệu hiển thị tải (download) tồn bộ, tập tin Video chất lượng cao có dung lượng lớn cơng việc tiêu tốn nhiều thời gian Video Streaming tiết kiệm thời gian cho người dùng cách sử dụng công nghệ giải nén kết hợp với hiển thị liệu đồng thời lúc tiếp tục tải video Quá trình gọi kỹ thuật đệm (buffering): + Thay gửi lần nhất, liệu video streaming chia thành gói nhỏ, sau liên tục truyền phần chia + Ban đầu bên nhận lấy phần chia nhỏ liệu Video hiển thị phần video nhận được, đồng thời lúc hiển thị gói liệu lại lấy để kịp cho việc hiển thị Video Streaming thể hai dạng: + Video theo yêu cầu (on demand): liệu Video lưu trữ máy chủ đa phương tiện truyền đến người dùng có yêu cầu, người dùng có toàn quyền để hiển thị thực thao tác (tua, dừng, quay lại…) với đoạn liệu + Video thời gian thực (live event): liệu Video biến đổi trực tiếp từ nguồn cung cấp liệu theo thời gian thực (máy camera, microphone thiết bị phát liệu Video…) Việc đảm bảo chất lượng dịch vụ ứng dụng tốn vơ cấp thiết Chính tơi lựa chọn đề tài “Nghiên cứu ứng dụng mơ hình P2P vào ứng dụng client server” Đề tài đề xuất nghiên cứu ứng dụng, cách tiếp cận sử dụng đồng thời hai giao thức peer- to- peer client – server thông qua local proxy cho ứng dụng streaming video Luận văn chia phần sau: Chương 1: Tổng quan Chương 2: Cơ sở lý thuyết 10 3.5 Thiết kế chi tiết hệ thống video streaming Giải pháp sử dụng mơ hình local proxy tơi trình bày trên, tơi thiết kế chi tiết chức hệ thống video streaming 3.5.1 Đăng ký người dùng Qui trình sử dụng để đăng kí tài khoản sử dụng video streaming Local proxy Client Đăng ký Bắt đầu Nhập thông tin đăng ký Kiểm tra tổn tại local Lưu thông tin đăng ký local proxy Kết thúc Y P2P Agent N Kiểm tra tổn mạng P2P Lưu thông tin đăng ký vào hệ thống P2P Kết thúc Y N Hình 3.3 Đăng ký người dùng Quy trình đăng ký thực sau 34 Kết thúc Bảng 3.1 Quy trình đăng kí người dùng Bước Mô tả Người sử dụng nhập thông tin đăng ký client, client gửi yêu cầu tới local proxy Local proxy kiểm tra máy xem người dùng đăng ký hay chưa - Nếu có trả lại kết người dùng đăng ký cho client kết thúc - Nếu khơng có, local proxy gửi thơng tin tìm kiếm qua P2P agent P2P Agent tìm kiếm thông tin người dùng mạng P2P thông qua thao tác search filename trả lại kết cho local proxy Nếu kết tìm kiếm có local proxy thơng báo người dùng đăng ký với client Nếu kết tìm kiếm khơng có local proxy lưu liệu đăng ký người dùng $APP/$username/..txt trả kết thành cơng cho client 3.5.2 Local proxy sau tiến hành lưu thông tin đăng ký người dùng vào mạng P2P Đăng nhập Qui trình triển khai người dùng muốn sử dụng dịch vụ streaming video Mục tiêu xác định quyền hạn người dùng, người dùng phép sử dụng dịch vụ hay không, cung cấp thông tin người dùng để triển khai dịch vụ thích nghi người dùng như: hạn chế nội dung video theo độ tuổi, hạn chế video theo ngôn ngữ, tùy biến ngôn ngữ/phụ đề video, … phân nhóm người dùng theo sở thích, vị trí, thời gian sử dụng dịch vụ, … để tăng hiệu hệ thống 35 Local proxy Client Đăng nhập Bắt đầu Nhập thông tin đăng nhập Tạo file trạng thái Kiểm tra tổn tại local, xác thực P2P Agent Y Lưu thông tin đăng ký local proxy N Kiểm tra tổn mạng P2P, xác thực Đăng nhập thành công Đăng nhập không thành công Đưa file trạng thái vào P2P Y N Hình 3.4 Quy trình đăng nhập Quy trình đăng nhập thực Bảng 3.2 sau 36 Bảng 3.2 Quy trình đăng nhập Bước Mơ tả Người sử dụng nhập thông tin đăng nhập module client, client gửi yêu cầu tới local proxy Local proxy kiểm tra máy xem người dùng đăng ký hay chưa - cho client kết thúc - Nếu có tiến hành xác thực kết người dùng đăng ký Nếu không có, local proxy gửi thơng tin xác thực qua P2P agent P2P Agent tìm kiếm thơng tin người dùng mạng P2P thông qua thao tác search filename Nếu kết tìm kiếm có P2P Agent lấy file thông tin người dùng qua thao tác get file name Sau local proxy xác thực người dùng Khi xác thực thành công, local proxy lưu file thông tin người dùng lại để phục vụ cho lần đăng nhập sau, đồng thời tạo file user khác xác định người dùng đăng nhập File p2p agent đẩy vào mạng p2p lưu node chịu trách nhiệm lưu file Khi người sử dụng logout khỏi hệ thống, file xoá Nếu kết tìm kiếm khơng có local proxy thông báo kết không user không tồn tới client 3.5.3 Danh sách đoạn video có Khi người sử dụng login, local proxy tìm máy local xem có chứa danh sách video xem hay khơng đường dẫn APP/$username/. Nếu danh sách khơng có máy local danh sách tìm thấy mạng P2P thông qua phép search file name Sau tìm thấy, file lưu máy local 37 Việc hiển thị trạng thái phân đoạn video tồn mạng mà username quyền sử dụng thực việc p2p agent tìm kiếm file 3.5.4 Gửi video Qui trình sử dụng để gửi video lên mạng cho client khác Qui trình thực tự động local proxy mà khơng có can thiệp tường minh người dùng Người dùng can thiệp gián tiếp thơng qua việc cấu hình client Client khác u cầu video Local proxy Tạo/định dạng video streaming P2P Agent Gửi Video Đưa file video streaming vào mạng P2P Hình 3.5 Qui trình gửi video Quy trình gửi video cho client khác thực Bảng 3.3 sau Qui trình tương tự việc server đáp ứng kết nối client gửi liệu streaming video đến cho client mơ hình streaming video sử dụng client-server 38 Bảng 3.3 Quy trình gửi video Bước Mơ tả Một client hệ thống gửi yêu cầu video đến cho client xét.Client xét tạo yêu cầu thiết lập video streaming đến cho local proxy gửi yêu cầu tới local proxy Local proxy tạo streaming video theo định dạng .... lưu $APP/$username/outbox/ Sau gửi yêu cầu chuyển file tới P2P agent P2P Agent đưa streaming video vào mạng thông qua thao tác streaming file 39 3.5.5 Hiển thị video Qui trình tương tự qui trình hiển thị video client mơ hình clientserver Chỉ khác với tồn local proxy, video lúc lấy từ server qua mạng mà có trường hợp lấy chỗ (trên máy) Đây trường hợp local proxy chứa sẳn đoạn video cần hiển thị Hiển thị video Local proxy Tìm kiếm file video local Lưu file video máy local Tìm kiếm file video mạng P2P Client Yêu cầu hiển thị video P2P Agent Hiển thị video Bắt đầu Hình 3.6 Quy trình hiển thị đoạn video Quy trình hiển thị video thực Bảng 3.4sau 40 Bảng 3.4 Quy trình hiển thị đoạn video Bước Mô tả Module client gửi yêu cầu hiển thị video tới local proxy Local proxy tìm kiếm file theo định dạng . thư mục $APP/$username/inbox/ Nếu ko tìm thấy, local proxy gửi yêu cầu tìm file tới P2P agent P2P Agent tìm kiếm file mạng P2P qua thao tác search file name . Nếu tìm thấy thực thao tác get streaming video trả lại cho local proxy 3.5.6 Local proxy lưu file $APP/$username/inbox/ trả cho client Thêm đoạn video Quy trình thêm đoạn video danh sách thực thông qua phép tìm kiếm file mạng P2P Nếu phép tìm kiếm cho kết quả, danh sách phân đoạn video chứa file cập nhập Qui trình gọi tường minh người dùng muốn xem đoạn video mới, phim mới, đoạn video khác thời điểm khác, không tường minh chương trình client chơi hết đoạn video chạy, cần tải tiếp đoạn Qui trình vừa giống, vừa khác với mơ hình client-server Giống gọi người dùng yêu cầu chuyển đến đoạn phim (một cách tường mình/khơng tường minh) Khác đáp ứng khơng gửi trực tiếp lên server mà gửi vào mạng thông quan local proxy Tương lai hiệu hệ thống cải thiện thêm giải thuật nâng cao hiệu local proxy để tăng tính sẳn dùng video yêu cầu local proxy 41 Bắt đầu Local proxy Client Thêm đoạn video Yêu cần thêm video P2P Agent Tìm kiếm file video Cập nhập lại danh sách video Tìm kiếm file video mạng P2P Hình 3.7: Quy trình thêm đoạn video Bảng 3.5 Quy trình thêm video Bước Mô tả Module client gửi yêu cầu thêm video tới local proxy Local proxy tìm kiếm file theo định dạng . Nếu ko tìm thấy, local proxy gửi yêu cầu tìm file tới P2P agent 3.5.7 P2P Agent tìm kiếm file mạng P2P Nếu tìm thấy thực thao tác trả lại cho local proxy Local proxy lưu file lại trả cho client Đăng xuất Dùng để đóng client khỏi mạng P2P 42 Cài đặt, thử nghiệm đánh giá 3.6 Để xây dựng ứng dụng trên, sử dụng ngôn ngữ Java với mã nguồn mở – mã nguồn cung cấp thư viện để xây dựng mạng P2P Các cơng việc cần để thực hố mơ hình giải pháp là: - Xây dựng module client, server với tính đăng ký, đăng nhập, lấy danh sách video có, gửi video, hiển thị video đăng xuất Với module client module server (local proxy) nằm máy - Xây dựng module peer to peer với tính bao gồm: tìm kiếm file, get file từ hệ thống, put file lên hệ thống Với việc phân tích chi tiết mơ hình ứng dụng chức trên, mơ hình hồn tồn thực có khả áp dụng theo yêu cầu đặt toán 3.6.1 Cài đặt nút mạng Các nút mạng cài đặt vlc, java, p2p agent, mô đun local proxy VLC đóng vai trị phần mềm streaming video, để gửi nhận video/audio truyền thống Java (JRE) đóng vai trị tạo mơi trường để chạy chương trình java VLCJ đóng vai trị kết nối VLC với chương trình java p2p agent có nhiệm vụ dẫn hướng triền khai dịch vụ tìm video, quảng bá video mạng p2p Để đơn giản sử dụng chế published/subcriber để truy vấn cập nhật video có mạng thơng qua server dịch vụ trung tâm (như mạng p2p chưa hoàn chỉnh, cịn cần server quản lí nút có chứa video thông tin kèm theo) Để kết nối chương trình client với mạng p2p mơ đun local proxy sử dụng Mô đun chuyển truy vấn chương trình play video thuộc client sang mạng p2p agent để có thơng tin stream video cần chơi Sau thơng tin stream video chơi vlc thông qua lời gọi chương trình thực vlcj Để nhanh tốc độ xử lí (chơi streaming) video, tơi lựa 43 chọn sử dụng vlcj để làm cầu nối java vlc (chương trình xử lí, encode, decode streaming luồng video mạng) Hiện nay, để đơn giản thơng tin cấu hình dạng văn túy Một video dịng văn Thơng tin bao gồm: tên video, mã định danh video, thời gian bắt đầu, thời gian kết thúc, thông tin định dạng, … (không bắt buộc) Trong triển khai thử nghiệm, nút vừa đóng vai trị server streaming video vừa đóng vai trò client nhận video Trên máy, cài đặt thư mục chứa file streaming video Danh sách file có bao gồm định danh file, thông tin file (thời gian bắt đầu, thời gian kết thúc) lưu file cấu hình) Số lượng file video tối đa lưu, số lượng kích thước file video tối đa lưu qui định cố định code chương trình Mỗi chạy file video nhận từ mạng, nút nhận streaming từ mạng, sau play video nhận Đồng thời streaming, nút lưu trữ streaming vào đĩa cứng cục phép stream ming tiếp đến máy khác mạng 3.6.2 Kết thử nghiệm Hệ thống thử nghiệm máy tính, máy đóng vai trị server chứa thơng tin video nằm peer Các máy cịn lại đóng vai trò server streaming video client playing video Thử nghiệm cho thấy chương trình streaming video chạy tốt: lấy video từ máy máy lại, cho phép lập vùng đệm video để treaming đến peer khác hệ thống 3.6.3 Đánh giá hướng phát triển Hệ thống mạng p2p chưa hồn chỉnh cịn cần server trung tâm lưu trữ thông tin mẫu video nằm peer hệ thống 44 Vì thời gian thử nghiệm triển khai hệ thống ngắn, nên qui mơ thử nghiệm cịn nhỏ nên chưa thể đánh giá cách đầy đủ hiệu hệ thống Trong tương lai tới cần triển khai thử nghiệm diện rộng để có đánh giá khác đầy đủ Để phát huy đầy đủ ưu điểm mạng p2p cần triển khai chế dự phòng cho khả đứt mạng Nếu chạy streaming video từ máy A, cần chuẩn bị streaming video từ máy khác mạng để thay kết nối với máy A có vấn đề Để tăng hiệu hệ thống, tương lai cải tiến hệ thống streaming nhận video từ nhiều peer lúc cho phép xem liên tục video: nhận video streaming từ máy A1 xen kẻ với việc nhận streaming từ máy A2 45 KẾT LUẬN Sau thời gian tìm hiểu nghiên cứu, đề tài luận văn “Nghiên cứu ứng dụng mơ hình peer to peer vào ứng dụng client server” hồn thành hướng dẫn tận tình PGS.TS Hà Quốc Trung Trong luận văn này, tìm hiểu mơ hình clinet server mơ hình P2P Để ứng dụng mơ hình P2P ứng dụng vào mơ hình client server tơi đưa mơ hình giải pháp local proxy mơ hình share cache folder Từ hai mơ hình giải pháp tơi chon mơ hình local proxy để trình bày giải pháp chi tiết thiết kế ứng dụng video streaming sử dụng mô hình local proxy kết hợp ưu điểm mơ hình client server peer to peer Mặc dù có nhiều cố gắng, song với hiểu biết hạn hẹp nên luận văn khơng tránh nhiều thiếu sót,rất mong tiếp nhận ý kiến đóng góp quý thầy bạn đọc để luận văn hồn thiện thêm để áp dụng vào thực tế 46 TÀI LIỆU THAM KHẢO Bin Rong, “Video Streaming over the Internet using Application Layer Multicast”, RMIT University, 2008.” Dmitri Moltchanov (2012) Client/server and peer-to-peer models: basic concepts Dejan S Milojicic, Vana Kalogeraki, Rajan Lukose, Kiran Nagaraja1, Jim Pruyne, Bruno Richard, Sami Rollins, Zhichen Xu (2003) Peer-to-Peer Computing,Technical Report HPL-2002-57, HP Laboratories Palo Alto Indrani Gupta, Ken Binman, Prakash Linga, Al Demers, Robbert van Renesse:” Peer – to – Peer Networks: Kelips” L Abeni, C Kiraly, R Lo Cigno, “Achiving performance and robustness in P2P streaming systems”, University of Trento, Italy, Tech Rep TR-DISI09-041, 2009 Ha Quoc Trung (2012) “New approach to develop the messenger application: from client server design to p2p implementation”, ACSIT-2012 Ion Stoica, Robert Morris, David Karger, M Frans Kaashoek, Hari Balakrishnan “Chord: A scalable peer-to-peer lookup protocol for internet applications” Nguyen Quang Thu: Study of distributed replication: design a messenger application using local proxy model Master’s thesis, Hanoi University of Science and Technology, 2013 Lawrence Chung Client-Server Architecture, Computer Science Program, The University of Texas, Dallas 10 Luong Quy Tho, Ha Quoc Trung: P2P shared-caching model: using P2P to improve client-server application performance SoICT 2013: 222-226 11 Wenwu Zhu, Member, IEEE, Dapeng Wu, Student Member, IEEE, Yiwei Thomas Hou, Member, IEEE, Ya-Qin Zhang, Fellow, IEEE, Jon M Peha, 47 Senior Member, IEEE “Streaming Video over the Internet: Approaches and Directions” 12 http://sourceforge.net/projects/open-chord/ 48 ... lượng dịch vụ ứng dụng toán vơ cấp thiết Chính tơi lựa chọn đề tài ? ?Nghiên cứu ứng dụng mơ hình P2P vào ứng dụng client server? ?? Đề tài đề xuất nghiên cứu ứng dụng, cách tiếp cận sử dụng đồng thời... clinet server mơ hình P2P Để ứng dụng mơ hình P2P ứng dụng vào mơ hình client server tơi đưa mơ hình giải pháp local proxy mơ hình share cache folder Từ hai mơ hình giải pháp tơi chon mơ hình local... MỤC HÌNH VẼ Hình 2.1 Mơ hình client server 13 Hình 2.2 Quá trình gửi tin mơ hình client server 14 Hình 2.3 Kiến trúc client server tầng 16 Hình 2.4 Kiến trúc client server