LEECH Chưởng trình Chat bằng c# : Source :

Similar documents
Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM DIỆT VIRUS AVIRA

Cụ thể những công việc mà AndroidManifest.xml thực hiện: - Đặt tên cho Java package của ứng dụng.

Hướng dẫn cài đặt FPT

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

Nội dung chính của chương. Các công nghệ đĩa cứng Cấu tạo vật lý của đĩa cứng Cấu tạo logic của đĩa cứng Cài đặt đĩa cứng như thế nào?

Chương 7. Application Layer. Tài liệu : Forouzan, Data Communication and Networking

HƯỚNG DẪN SỬ DỤNG PLESK PANEL

Chương 5. Network Layer 19/09/2016 1

HƯỚNG DẪN SỬ DỤNG HỆ THỐNG CẬP NHẬT CHỨNG THƯ SỐ HOTLINE:

HƯỚNG DẪN SỬ DỤNG ĐẦU GHI H.264 DVR VISION VS (4CH - 8CH - 16CH)

Chương 6. Transport Layer. Tài liệu : Forouzan, Data Communication and Networking

Chương 5. Network Layer. Phần 1 - Địa chỉ IPv4. Tài liệu : Forouzan, Data Communication and Networking

Tình huống 1: PPPoE với Username và Password

Internet Protocol. Bởi: Phạm Nguyễn Bảo Nguyên

Bộ môn MMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

HƯỚNG DẪN CÁCH SỬ DỤNG WINDOWS MOVIE MAKER

CẤU TRÚC DỮ LIỆU NÂNG CAO

Cài đặt và cấu hình StarWind iscsi trên Windows. iscsi SAN là gì?

Khoa KH & KTMT Bộ môn Kỹ Thuật Máy Tính

Bài Thực hành Asp.Net - Buổi 1 - Trang: 1

GIẢI THUẬT ĐỊNH TUYẾN (ROUTING ALGORITHM)

BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS C#

SIEMENS INDUSTRIAL NETWORKS

I. Hướng Dẫn Đăng Nhập:

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MINICHAT. Bài giảng 3. Trang1. Khoa Khoa Học Và Kỹ Thuật Máy Tính

HƯỚNG DẪN QUẢN TRỊ HỆ THỐNG

Tài liệu hướng dẫn: Stored Procedure

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

LẬP TRÌNH WINDOWS FORM VỚI CÁC CONTROL NÂNG CAO (Các control trình bày dữ liệu dưới dạng danh sách)

HƢỚNG DẪN TRIỂN KHAI KASPERSKY - MOBILE DEVICE MANAGEMENT

Tạo Project với MPLAB

Nhấn nút New để tạo 1 biến mới Trang 17

SIMULATE AND CONTROL ROBOT

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

Kỹ thuật thu nhỏ đối tượng trong Design (Layout)

Phần 1: Hướng dẫn sử dụng PictureBox tạo Slide Show

TÀI LIỆU THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU NÂNG CAO

BÀI 1: VBA LÀ GÌ? TẠO MACRO, ỨNG DỤNG CÁC HÀM TỰ TẠO (UDF), CÀI ĐẶT ADD-INS VBA là gì?

Giáo trình này được biên dịch theo sách hướng dẫn của Sun Light. Vì là hướng dẫn kỹ thuật, trong này những thuật ngữ kỹ thuật bằng tiếng Anh tôi chỉ

B5: Time to coding. Tới thư mục src/example.java và thay đổi nội dung file như sau: Mã: package at.exam;

GV: Phạm Đình Sắc or

STACK và QUEUE. Lấy STACK

Lecture 12. Trees (1/2) Nội dung bài học:

Bài tập lớn số 1. Giả lập bộ định thời

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HOSTING PLESK PANEL

BELGIUM ONLINE APPOINTMENT

Online Appointment System will work better with below conditions/ Hệ thống đặt hẹn online sẽ hoạt động tốt hơn với điều kiện sau đây:

Phần 2. SỬ DỤNG POWERPOINT ĐỂ CHUẨN BỊ NỘI DUNG TRÌNH BÀY

1 Bước 1: Test thử kit LaunchPad.

Kích hoạt phương thức xa (RMI- Remote Method Invocation )

Mạng máy tính - Computer Network: Hệ. Giao thức - Protocol:

Các kiểu định địa chỉ họ MSC-51

Lab01: M V C Lưu ý: Để thực hành, các bạn phải cài Visual Studio 2013 trở lên mới hỗ trợ MVC5.

Môn Học: Cơ Sở Dữ Liệu 2. Chương 3 LẤY DỮ LIỆU TỪ NHIỀU NGUỒN

TỔNG QUAN VỀ.NET VÀ C#

Entity Framework (EF)

Tạo repository mới. The working tree. The staging index. Lệnh git init tạo một repository loại git. tại thư mục hiện tại: $ git init

BÀI 6 LÀM VIỆC VỚI THÀNH PHẦN MỞ RỘNG CỦA CSS3

Bài 10. Cấu trúc liên nối. khác nhau được gọi là cấu trúc liên nối. nhu cầu trao đổi giữa các module.

Cập nhật ResultSet trong JDBC

LÂ P TRI NH WEB ASP.NET

Đa ngôn ngữ (Internationalization) trong Servlet

Tìm hiểu Group Policy Object và các ví dụ

ĐỌC, GHI XML VỚI C# TRONG ADO.NET --- SỬ DỤNG VISUAL STUDIO

BÀI GIẢNG CHƯƠNG 3 GIAO TIẾP KẾT NỐI SỐ LIỆU

Exceptions. Outline 7/31/2012. Exceptions. Exception handling is an important aspect of objectoriented. Chapter 10 focuses on:

NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU. Bài 10: Thư viện Pandas (2)

CHƯƠNG 2: CÁC ĐẶC ĐIỂM VỀ MÔI TRƯỜNG PHÁT TRIỂN (IDE)

Mô hình dữ liệu quan hệ (Relational data model)

HỢP ĐỒNG MUA BÁN HÀNG HÓA QUỐC TẾ GV: NGUYỄN THỊ BÍCH PHƯỢNG

B6: Time to coding. Đi tới src\at.exam tạo một class mới là CustomViewGroup với nội dung sau: Mã: package at.exam;

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

MỤC LỤC. Giáo trình Thiết kế web Trang 1

dụng một chính sách, điều này giúp dễ dàng quản lý và cung cấp tính năng Load Balancing (cân bằng tải) phục vụ tốt hơn các yêu cầu của tổ chức.

Bài tập căn bản Visual Basic.Net Vòng lặp. txtn. txtketqua. btntinh. txtn. txtketqua. btntinh. Trang 1

BÀI 4 GIAO TIẾP GIỮA CÁC TIẾN TRÌNH TRONG LINUX

BÀI THỰC HÀNH SỐ 1. Quản trị tập tin: 1/ Tạo các thư mục sau: Bài tập thực hành linux Linuxlab. bt1 bt11 bt111. bt121. bt12. bh1 bh11 bh111.

BẢO MẬT TRONG SQL SERVER

Time Picker trong Android

PHÁT TRIỂN ỨNG DỤNG WEB

Dọn "rác" Windows 7 vào dịp cuối năm

BÀI LAB ĐỔI TÊN DOMAIN

Qu n ả tr h ố g t p ậ tin

Lập trình chuyên nâng cao. Lập trình phân tán (Distributed computing

JAVASCRIPT. Giảng viên : Ths. PHẠM ĐÀO MINH VŨ

KIẾN TRÚC MÁY TÍNH. Giảng viên: ThS. Phan Thanh Toàn. v

B3: Bên khung Package Explore bên trái đi tới thư mục res, bạn sẽ thấy có 3 thư mục con:

Bài 10: Cấu trúc dữ liệu

Câu 1: (2 điểm) So sách giữa 2 đối tượng Response và Request. Cho ví dụ minh hoạ.

LINQ TO SQL & ASP.NET

Giao tiếp giữa các tiến trình

Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ. Những hỗ trợ tiên tiến khác của SQL. Đỗ Thanh Nghị

Chủ đề 7: Triển khai và Bảo trì. COMP1026 Introduction to Software Engneering CH7-1 HIENLTH

Ôn tập Thiết bị mạng và truyền thông DH07TT - Lưu hành nội bộ (không sao chép dưới mọi hình thức)

Bài 13: C++11. EE3490: Kỹ thuật lập trình HK1 2017/2018 TS. Đào Trung Kiên ĐH Bách khoa Hà Nội

LẬP TRÌNH TEB308 / 824 CƠ BẢN BẰNG BÀN KEY

LAB IP SLA Bài 1. Bùi Quốc Kỳ ***

GIỚI THIỆU TỔNG ĐÀI KX-HTS824. September, 2016

2.4. GIAO THỨC MQTT Các khái niệm cơ bản MQTT được phát triển bởi IBM và Eurotech, phiên bản mới nhất là MQTT 3.1 MQTT (Giao vận tầm xa) là

Transcription:

LEECH Chưởng trình Chat bằng c# : Source : http://totuan.one-forum.net/ki7871n-...ang-c-t486.htm I. Giới thiệu Chương trình cho phép thực hiện việc giao tiếp giữa các clients thông qua server, II. Nội dung sử dụng luồng tại server, mỗi khi Client kết nối đến server chương trình sẽ tạo những luồng riêng biệt để xử lý các kết nối, chương trình cũng tạo ra những luồng để xử lý các Client mới. Chương trình được mô tả cụ thể như sau: Chương trình ThreadedTcpSrvr.cs using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; class ThreadedTcpSrvr private TcpListener client; public ThreadedTcpSrvr() _ client = new TcpListener(9050); client.start(); Console.WriteLine("Waiting for clients..."); while(true) while ( client.pendingo) Thread.Sleep(1000); ionthread newconnection = new ionthread(); newconnection.threadlistener = this.client; Thread newthread = new Thread(new ThreadStart(newconnection.Handleion)); newthread.start(); public static void Main() ThreadedTcpSrvr server = new ThreadedTcpSrvr(); class ionthread public TcpListener threadlistener; private statin int. connections = 0; public void Handleion() int recv; byte[] data = new byte[1024]; TcpClient client = threadlistener.accepttcpclient(); Networkstream ns = client.getstream(); connections++; Console.WriteLine("New client accepted: 0 active connections",

connections); string welcome = ""; data = Encoding.ASCII.GetBytes(welcome); ns.write(data, 0, data.length); while(true) data = new byte[1024]; recv = ns.read(data, 0, data.length); if (recv == 0) break; ns.write(data, 0, recv); ns.close(); client.close(); connections Console.WriteLine("Client disconnected: 0 active connections", connections); Chương trình sử dụng lớp Tcp Listener để lắng nghe các kết nối TCP theo cổng cố định (9050) đồng thời phương thức starto được sử dụng để chờ các clients mới. while(true) while (!client.pendingo) Thread.Sleep(1000); ionthread newconnection = new ionthread(); newconnection.threadlistener = this.client; Thread newthread = new Thread(new ThreadStart(newconnection.Handleion)); newlhread.slarl(); Vòng lặp while được sử dụng để kiểm tra các Client kết nối, nếu có chương trình sẽ tạo luồng để chấp nhận các kết nối. Khi server chấp nhận các kết nối từ phía Client, nó sẽ tạo ra socket riêng biệt và đưa vào một luồng mới. Một Client có thể gửi tin nhắn đến một Client và nhận được phản hồi từ chính Client đó mà không ảnh hưỏng đến các Client khác. Khi mỗi Client ngắt kết nối, luồng sẽ tự động ngắt. Chương trình dưới đây thực hiện việc gửi và nhận dữ liệu giữa các Client thông qua giao thức TCP Chương trình TCPChat.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;

using System.Net.Sockets; using System.Net; using System.Threading; namespace TcpChat public partial class TcpChat : Form public TcpChatQ InitializeComponent(); private static Socket client; private static byte[] data = new byte[1024]; void AcceptConn(IAsyncResult iar) Socket oldserver = (Socket)iar.AsyncState; client = oldserver.endaccept(iar); results.items.add("ion from: " + client.remoteendpoint.tostring()); Thread receiver = new Thread(new ThreadStart(ReceiveData)); receiver.start(); void ed(iasyncresult iar) try client.end(iar); results.items.add("ed to: " + client.remoteendpoint.t ost ring ()); Thread receiver = new Thread(new ThreadStart(ReceiveData)); receiver.start(); catch (SocketException) results.items.add("error connecting"); void Data(IAsyncResult iar) Socket remote = (Socket)iar.AsyncState; int sent = remote.end(iar); void ReceiveData() int recv; string stringdata; while (true) recv = client.receive(data); stringdata = Encoding.ASCII.GetString(data, 0, recv); if (stringdata == "bye") break; results.items.add(stringdata); stringdata = "bye"; byte[] message = Encoding.ASCII.GetBytes(stringData); client.(message); client. CloseQ;

results.items.add("ion stopped"); return; private void btnlisten_click(object sender, EventArgs e) results.items.add("listening for a client..."); Socket newsock = new Socket(AddressFamily.InterNetwork, SccketType.Stream, ProtocolType.Tcp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050); newsock.bind(iep); newsock.listen(5); newsock.beginaccept(new AsyncCallback(AcceptConn), newsock); private void btnconnect_click(object sender, EventArgs e) results.items.add(""); client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint iep = new IPEndPoint(IPAddress.Parse(txtip.Text), 9050); client.begin(iep, new AsyncCallback(ed), client); private void btnsend_click(object sender, EventArgs e) byte[] message = Encoding.ASCII.GetBytes(txttext.Text); txttext.clear(); client.begin(message, 0, message.length, 0, new AsyncCallback(Data), client); Chương trình được tạo dưới dạng form đơn giản với các đối tượng cụ thể sau: 0 Một textbox (txtip) cho phép nhập địa chỉ ip kết nối 0 Textbox (txttext): nhập nội dung gửi đi 0 Nút listen chờ nhận kết nối từ máy Client khác 0 Nút connect thực hiện các kết nối đến các máy khác từ xa 0 Nũt send thực hiện gửi tin nhắn đến các máy Client được nhập vào từ textbox (txttext). 0 Listbox (result) hiển thị nội dung Chat giữa các Client với nhau. 0 Khi ngưòi dùng nhấn nút listen một socket sẽ được tạo ra và lắng nghe các kết nối đang đến sử dụng phương thức beginacceptq: private void htn1.isten_click(object sender, EventArgs e) results.items.add("listening for a client..."); Socket newsock = new Socket(AddressFamily.InterNetwork, SccketType.Stream, ProtocolType.Tcp); IPEndPoint iep - new IPEndPoint(IPAddress.Any, 9050); newsock.bind(iep); newsock.listen(5);

newsock.beginaccept(new AsyncCallback(AcceptConn), newsock); Khi một chương trình chat khác kết nối., phương thức AcceptConnO tạo ra những socket riêng biệt cho mỗi Client. Khi khách hàng nhấn nút connect, một socket được tao ra và cố gắng để kết nối đến host từ xa, sử dụng phương thức beginconnect(). Sau khi host từ xa chấp nhận kết nối. Một socket được đưa đến luồng tạm thời, mục đích của luồng tạm thời này là chờ dữ liệu đến và đưa dữ liệu vào trong listbox void ReceiveData() int recv; string stringdata; while (true) recv = client.receive(data); stringdata = Encoding.ASCII.GetString(data, 0, recv); if (stringdata == "bye") break; results.items.add(stringdata); stringdata = "bye"; byte[] message = Encoding.ASCII.GetBytes(stringData); client.(message); client.close(); results.items.add("ion stopped"); return; Khi dữ liệu gửi đi có chuỗi bye, chương trình sẽ tự động đóng Socket, cả hai chương trình Chat bị ngắt và đóng kết nối Tcp. Minh họa chương trình Chat giữa 2 Client thông qua server: Chương trình được minh họa trên 2 máy khác nhau, máy 1 với địa chĩ ip: 172.16.71.13 đóng vai trò là máy server và Client, máy 2 với địa chỉ ip: 172.17.71.160 là máy Client Đầu tiên chạy chương trình ThreadedTcpSrvr trên máy 1

CÃ D:\Tmp\ThreadedTcpSrvr\ThreadedTcpSrvr\bin\Debug\ThreadedTcpSrvr.exe Mỏ chương trình TcpChat tại máy 1 và máy 2. Giả sử hai chương trình này được chạy cùng thời điểm đang xét. TcpChat I Máy 1 Ä l ü T c p C h a t 1 Máy 2 Nhap Dia chi IP 172.16.71 13 Listen Nhap Dia chi IP 172.16.71.13 Listen ed to: 172.16.71.13:9050 ed to: 172.16.71.13:9050 Bây giò bắt đầu kết nối 2 Client để Chat trực tiếp với nhau. Giả sử máy 2 giữ vai trò chà kết nối nhấn nút Listen. Máy 1 sẽ giữ vai trò kết nối, nhập địa chỉ ip máy 2:172.168.71.160 và nhấn nút khi đó 2 Client có thể Chat với nhau trực tiếp.

c' D:\Tmp\23-05-08\ThreadedTcpSrvr\ThreadedTcpSrvr\ThreadedTcpSrvr\bin\Debug\Thread... EBÜ W a itin g f o r c l i e n t s... Neu c l i e n t a c c e p te d : 1 a c t i v e c o n n e c tio n s Neu c l i e n t a c c e p te d : 2 a c t i v e c o n n e c tio n s Sau khi k ê t noi diiöc thiét lâp, 2 mây cô the gûri nhân tin nhan qua lai vôi nhau: May 1 I T cpchat Mây 2 Nhap Dia chi IP 172.16.71.1G0 Listen Nhap D» chi IP 172 16 71 13 Listen ed to: 172.16.71 13:9050 ed to: 172.16.71.160:9050 Gui tu may 160 ion stopped ed to: 172.16.71139050 Listening for a csert... ion from 17216.71 13:1677 Gui tu may 13 ion stopped