Lập trình Socket

Trang 1 trong tổng số 2 trang 1, 2  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Lập trình Socket

Bài gửi  Admin on 18/3/2013, 10:02

- Lập trình Sockets dùng TCP/UDP (VB 6.0, VC++ 6.0, VC# .NET).
- Sử dụng Microsoft Winsock Control.
- Sự cần thiết của những chương trình như vậy.


Được sửa bởi Admin ngày 4/4/2013, 13:55; sửa lần 1.

Admin
Admin

Tổng số bài gửi : 291
Join date : 18/02/2009

Xem lý lịch thành viên http://hedieuhanh.forumvi.net

Về Đầu Trang Go down

Using Winsock control !

Bài gửi  NguyenQuocHuy (I22B) on 18/3/2013, 23:24

Sử dụng Winsock Control !
Winsock control hổ trợ truy cập dễ dàng đến các dịch vụ TCP và UDP. Sử dụng Winsock control, bạn không cần những kiến thức chi tiết về cấu trúc TCP/UDP cũng như về các hàm winsock API. Bằng cách sử dụng winsock control, bạn có thể dể dàng connect đến một máy tính từ xa và trao đổi dữ liệu theo cả hai hướng

1/ Thêm Winsock control vào trong project của bạn

Để add winsock control vào project, click lên menu Project rồi chọn Components. Trong cửa sổ Add Components, tab Controls, đánh dấu chọn Microsoft Winsock Control 6.0. Bây giờ winsock control đã được thêm vào ToolBox. Kéo thả control này lên form hoặc double click lên control, bạn đã sẵn sàng sử dụng winsock control.

2/ Cơ bản về TCP với winsock control

Giao thức Tranfer Control Protocol (TCP) cho phép bạn tạo ra một kết nối đến một máy tính ở xa. Sử dụng kết nối này, 2 máy tính có thể tryền dữ liệu với nhau.

Nếu bạn đang viết một ứng dụng client, bạn cần biết tên hay IP của máy server, gán giá trị này cho thuộc tính RemoteHost, đồng thời bạn cũng cần đặt giá trị cho thuộc tính RemotePort là một port mà máy server đang lắng nghe. Sau đó thực thi phương thức Connect của winsock control.

Nếu bạn dự định viết một ứng dụng server, vậy bạn cần thiết đặt thuộc tính LocalPort là một số nguyên nào đó, ứng dụng của bạn sẽ lắng nghe trên port này. Khi trình client connect đến ứng dụng server của bạn, sự kiện ConnectionRequest sẽ xảy ra. Để hoàn thành kết nối, bạn cho thực thi phương thức Accept trong sự kiện ConnectionRequest.

Sau khi kết nối đã được thiết lập, hai máy tính có thể tryền và nhận dữ liệu. Để truyền dữ liệu, bạn thực thi phương thức SendData. Khi dữ liệu truyền đến, sự kiện DataArrival sẽ xảy ra. Thực thi phương thức GetData trong sự kiện DataArrival để nhận dữ liệu truyền đến.

3/ Cơ bản về UDP với winsock control

User Datagram Protocol (UDP) là một giao thức phi kết nối. Trong giao thức TCP, các kết nối được thiết lập và giữ nguyên cho đến khi Close. Trong UDP, các máy tính chỉ thiết lập kết nối với nhau khi truyền dữ liệu và kết nối sẽ mất sau khi dữ liệu được truyền xong.

Để truyền tải dữ liệu, trước hết bạn thiết lập giá trị cho thuộc tính LocalPort trên client (nơi nhận dữ liệu). Phía server (nơi truyền dữ liệu), bạn cần đặt giá trị cho thuộc tính RemoteHost là IP hay tên của máy client, và RemotePort trùng với giá trị đã thiết đặt cho LocalPort trên client; sau đó thực thi phương thức SendData để bắt đầu truyền tải dữ liệu. Lúc đó, bên phía client sẽ thực thi phương thức GetData trong sự kiện DataArrival để nhận dữ liệu.


NguyenQuocHuy (I22B)

Tổng số bài gửi : 49
Join date : 10/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Windows Socket API(hoặc winsock)

Bài gửi  NguyenNhatHuy64(I22B) on 19/3/2013, 00:01

API là viết tắt của Application Programming Interface(giao diện lập trình ứng dụng).
Khái quát sơ lược:Các hàm Winsock của ứng dụng mà bạn tạo sẽ liên kết với các thư viện liên kết động(viết tắt là dll - dynamic link library) có tên là wsock32.dll(được định nghĩa trong cấu trúc winsock.h) hoặc là winsock.dll(được định nghĩa trong wsock32.h).Nghĩa là ứng dụng của bạn sẽ sử dụng dll này cho ứng dụng của bạn chạy tốt hơn,hỗ trợ bạn nhiều hơn...Hình dung trong thực tế như thế này,xe đạp bạn chạy,dây sên của bạn được bôi trơn xe của bạn sẽ chạy êm hơn,ở đây dầu nhớt chính là winsock,còn dây sên là ứng dụng của bạn(ví dụ minchat...)

Lập trình winsock:đây là cơ chế trừu tượng dùng cho cơ chế truyền thông giữa các tiến trình với nhau.Trong đó các cấu trúc chứa các thông tin cần cho việc quá trình truyền thông giữa các tiến trình mạng với nhau bao gồm địa chỉ IP và cổng(port).
Tuy nhiên cơ chế truyền thông này do ai quản lý,sử dụng thông qua đâu.Để quản lý socket chỉ có thể do HDH quản lý thông qua các hanlde(mục quản cửa sổ),Socket này thiết lập theo kiểu:
+ stream socket - theo kiểu có thiết lập cầu nối TCP(TCP có ưu điểm là gửi đúng trình tự,không thất thóat dữ liệu,không bị trùng dữ liệu ci dụ gửi gói dữ liệu 123abc thì qua máy khác cũng là 123abc..)Tuy nhiên có một điều là thiết lập theo kiểu TCP có rắc rối là máy nhận chưa nhân hết mà máy gửi gửi tiếp(không có cơ chế kiểm soát,thông báo có gửi thếp hay không,ví dụ,bạn gọi điện thọai cho một người,bạn kia họ vẫn còn tín hiệu nhưng một lúc sau,họ cúp máy nhưng bạn vẫn trò chuyện tiếp).
+datagram socket ứng với nó là UDP(giao thức không có thiết lập cầu nối,ngược với TCP,dữ liệu theo kiểu này không tin cậy như TCP(bị mất,lẫn lộn,trùng lặp...),nó dùng theo kiểu broadcast để phân tán dữ liệu(ví dụ broadcast:bạn có 1 thông báo cho nhiều người biết,bạn dùng micro với loa,nói cho mọi người,ai nghe hay không nghe cũng được,vậy broadcast hay còn gọi quảng bá,nó truyền thông tin dữ liệu 1 cách đại trà và máy tính này có liên quan sẽ lắng nghe và đón nhận thông tin),và không tốn thời gian kiểm tra như là TCP.
Bài viết này mình sưu tầm trong quá trình học ,mong thầy và các bạn thảo luận thêm. Very Happy

NguyenNhatHuy64(I22B)

Tổng số bài gửi : 16
Join date : 09/03/2013
Age : 25

Xem lý lịch thành viên

Về Đầu Trang Go down

Lập trình Socket

Bài gửi  AnhDao(I22B) on 19/3/2013, 00:29

* Socket hay còn gọi là hốc liên lạc .
- Trong tin học khi người ta nói đến giao tiếp socket thì nó có nghĩa là một phương pháp dùng để giao tiếp giữa các tiến trình khác nhau trong mạng máy tính hay là trên một máy đơn .
- Trong các ứng dụng được viết, người ta sử dụng công cụ socket này rất nhiều như các Web , FTP .... Trong phần này chúng ta sẽ xem xét vấn đề trên môi trường Windows .
- Có 2 loại : Có kết nối ( TCP ) và không kết nối ( UDP )
+ TCP : là hình thức thiết lập sẵn mối liên kết giữa 2 máy trước khi truyền
Ví dụ : Khi chúng ta đi qua 1 con suối , muốn đi qua bờ suối bên kia, chúng ta dùng 1 sợi dây hay (trên câu cầu khỉ ) bắt ở 2 đầu suối để đi qua .

+ UDP : là hình thức không phải thiết lập sẵn mối liên kết giữa 2 máy trước khi truyền, do đó dễ dàng liên lạc với nhiều máy 1 lúc , nhưng k0 đảm bảo bằng TCP
Ví dụ : Chúng ta cũng đi wa 1 con suối , nhưng chúng ta không dùng dây ( hay cầu khỉ ) để đi wa . đó là phương thức khi dùng UCP. Level nguy hiểm đến với bạn sẽ tăng lên, bạn sẽ bị cuốn trôi đi . Không đảm bảo bằng TCP

Câu hỏi của Thầy trên lớp :
? > Như sơ đồ Liên lạc giữa 2 máy qua Sockets trong tài liệu , ta có thể thay đổi Sockets này bằng Sockets hay k0 ? Cụ thể bên Web server , sockets là 80
Theo em, vẫn có thể đổi được số cổng 80 bằng số cổng khác . Mục đích : để bảo mật là chính
Ví dụ : Trong công ty , Modem phát wife thường có IP cố định 192.168.1.1 . Người điều hành có thể thay đổi địa chỉ IP cố định đó thành 192.168.1.2 . Để khi 1 máy khác muốn truy cập vào Modem đó , Phải gõ đúng địa chỉ IP và Post . Để bảo đảm dc dữ liệu mật của công ty khi cần thiết.

? > Khi ở xa , người dùng có thể sử dụng , gửi dữ liệu qua 1 cổng cho trước hay không ?
Theo em, Việc này sẽ thực hiện được . Mục đích : dữ liệu truyền qua nhanh chóng để kịp tiến độ, tiết kiệm chi phí
Ví dụ : Công Ty cấp giấy phép quyền sử dụng đất và nhà ở cho mọi hộ dân cho 1 vùng , với nhiều tỉnh khác nhau . Dữ liệu để xử lí sẽ có sai sót, cần chỉnh sửa . Từ những vùng quê xa xôi, người sử dụng có thể sử dụng để gửi dữ liệu thông qua cổng IP cho trước . Dữ liệu cần xử lí đến nhanh chóng , theo kịp tiến độ công việc , bớt được chi phí về thời gian và tiền bạc .

P/S : đây là bài đầu tiên e đăng, e chỉ nghe và hiểu được từ Thầy có thế thôi, nên có rất nhiều sai sót và chưa hoàn hảo . Mong Thầy và các bạn cho e thêm ý kiến để bài e được hoàn chỉnh nhé !!!

AnhDao(I22B)

Tổng số bài gửi : 52
Join date : 09/03/2013
Age : 26
Đến từ : HoChiMinh

Xem lý lịch thành viên

Về Đầu Trang Go down

Lập trình Socket ( Khi kết nối 2 TCPClient vào 1 cổng TCPsever 2000)

Bài gửi  AnhDao(I22B) on 19/3/2013, 01:00

Thầy ơi , cho e hỏi
Như ví dụ thầy đưa lên bảng trong phần TCP sever --> tcpsever.exe và TCP Client -->tcpClient.exe ( double)
Ta kết nối 2 cổng TCP Client1 và TCP Client2 vào 1 cổng TCP Sever . Tiến trình như sau :
- TCP Client 1 nhập " Chào Thầy totuan1 " , nó sẽ hiện lên TCP Sever . Tương tự
- TCP Client 2 nhập " Chào Thầy totuan2 " , nó sẽ hiện lên TCP Sever
- TCP Sever click vào TCP Client1 trả lời " Chào e TCP1 " , nó sẽ hiện lên TCP Client 1 . Tương tự
- TCP Sever click vào TCP Client2 trả lời " Chào e TCP2 " , nó sẽ hiện lên TCP Client 2
Với chức năng, khi check vào nút Metiselect ( chọn nhiều , để có 1 câu trả lời , gửi đi nhiều nơi )
- Ta check vào TCP Client 1, TCP Client 2 , gửi " chào e TCP1 Và TCP2 ".
Nó hiện ra dòng văn bản trên TCP Client 1, TCP Client 2 là như nhau.

Giả sử , trong lớp I22B có 100 học sinh, đều chào Thầy như vậy, Thầy ko thể chọn từng TCPClient để trả lời từng bạn vì quá nhiều và tốn thời gian. Hoặc với dòng Văn bản " chào e TCP1 .... TCP100 " , nhiều bạn không muốn Thầy trả lời chung như vậy .
Vậy theo em, Thầy có cách nào để khi Nhập Văn bản vào.
"Chào e
TCP1
TCP2
....
TCP100"

Nhưng Khi hiện lên từng TCPClient của bạn nào , bạn ấy nhận được 1 lời chào đúng số TCPClient của bạn ấy . không hiển thị chung như trên ???
Liệu làm như vậy có được k0?

Câu hỏi hơi điên rồ , nhưng thực tế nhé . Thầy và các bạn cho e xin hướng giải quyết ạ .









AnhDao(I22B)

Tổng số bài gửi : 52
Join date : 09/03/2013
Age : 26
Đến từ : HoChiMinh

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  TranBinhCongLuanI12A on 19/3/2013, 09:09

AnhDao(I22B) đã viết:Thầy ơi , cho e hỏi
Như ví dụ thầy đưa lên bảng trong phần TCP sever --> tcpsever.exe và TCP Client -->tcpClient.exe ( double)
Ta kết nối 2 cổng TCP Client1 và TCP Client2 vào 1 cổng TCP Sever . Tiến trình như sau :
- TCP Client 1 nhập " Chào Thầy totuan1 " , nó sẽ hiện lên TCP Sever . Tương tự
- TCP Client 2 nhập " Chào Thầy totuan2 " , nó sẽ hiện lên TCP Sever
- TCP Sever click vào TCP Client1 trả lời " Chào e TCP1 " , nó sẽ hiện lên TCP Client 1 . Tương tự
- TCP Sever click vào TCP Client2 trả lời " Chào e TCP2 " , nó sẽ hiện lên TCP Client 2
Với chức năng, khi check vào nút Metiselect ( chọn nhiều , để có 1 câu trả lời , gửi đi nhiều nơi )
- Ta check vào TCP Client 1, TCP Client 2 , gửi " chào e TCP1 Và TCP2 ".
Nó hiện ra dòng văn bản trên TCP Client 1, TCP Client 2 là như nhau.

Giả sử , trong lớp I22B có 100 học sinh, đều chào Thầy như vậy, Thầy ko thể chọn từng TCPClient để trả lời từng bạn vì quá nhiều và tốn thời gian. Hoặc với dòng Văn bản " chào e TCP1 .... TCP100 " , nhiều bạn không muốn Thầy trả lời chung như vậy .
Vậy theo em, Thầy có cách nào để khi Nhập Văn bản vào.
"Chào e
TCP1
TCP2
....
TCP100"

Nhưng Khi hiện lên từng TCPClient của bạn nào , bạn ấy nhận được 1 lời chào đúng số TCPClient của bạn ấy . không hiển thị chung như trên ???
Liệu làm như vậy có được k0?

Câu hỏi hơi điên rồ , nhưng thực tế nhé . Thầy và các bạn cho e xin hướng giải quyết ạ .

Chào bạn,
Cách giải quyết cơ chế của bạn như sau:
1. Khi Client kết nối vào Server: server lưu lại các thông tin (IP, port, ...) của các client vào 1 mảng danh sách (trong C# là List)
2. Khi Server gởi thông tin: thì chỉ cần duyệt thông tin trong mảng đã lưu là có thể gởi được cho 1 hoặc nhiều client.
Bạn có thể tìm hiểu thêm tài liệu lập trình mạng (lập trình socket)

TranBinhCongLuanI12A

Tổng số bài gửi : 51
Join date : 20/02/2012
Age : 29

Xem lý lịch thành viên http://www.2dollarmayman.com

Về Đầu Trang Go down

Re: Lập trình Sockets

Bài gửi  AnhDao(I22B) on 19/3/2013, 10:20

Chào bạn !
Mình hỉu ý thứ 2 của bạn . Mình cũng đã trình bày ở ví dụ trên rồi , Nhưng vấn đề mình muốn mở rộng ra như sau :
+ Mình muốn dùng chỉ 1 câu trả lời duy nhất từ sever " chào em TCP1, TCP2, TCP3, ..., TCP100" , câu trả lời này được chuyển đến từng client
+ Nhưng khi client nhận dc ko phải là văn bản chung như trên. mà phải đúng với từng TCP
Cụ Thể : sever " chào em TCP1, TCP2, TCP3, ..., TCP100"
TCP1 nhận dc : " chào e TCP1 "
TCP2 nhận dc : " chào e TCP2 "
.....
TCP100 nhận dc : " chào e TCP100 "

+ Mình muốn chỉ 1 lần trả lời , nhưng nó tự tách ra ,tìm và trả lời đúng client của nó ....
Liệu có làm vậy dc k0?

Cảm ơn bạn nha .... hj flower

AnhDao(I22B)

Tổng số bài gửi : 52
Join date : 09/03/2013
Age : 26
Đến từ : HoChiMinh

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  NguyenManhHuy(I22B) on 19/3/2013, 10:26

Thầy cho cái ví dụ như vậy để sinh viên dễ hiểu ý của thầy thôi chứ muốn làm như bạn Đào thì viết code thêm vào là được thôi mà.
Ý tưởng thì có nhưng viết ra 1 đóng code với nhiều chức năng để giảng cho mọi người thì nhìn vào rối ko tiếp thu được.
VD: Bài giảng code của thầy lúc cuối giờ hôm qua mình nhìn vào rất rối chả hiểu gì cả...hihi.

NguyenManhHuy(I22B)

Tổng số bài gửi : 30
Join date : 09/03/2013
Age : 28
Đến từ : 12H1010047

Xem lý lịch thành viên

Về Đầu Trang Go down

Kết nối Server-Client với TCP/IP

Bài gửi  PhanPhamDanPhuong(I22B) on 19/3/2013, 11:14

Khi được chạy, server cần được xác định rõ địa chỉ IP và sẽ “lắng nghe” trên một port cụ thể. Server sẽ nằm trong trạng thái này cho đến khi client gửi đến một yêu cầu kết nối. Sau khi được server chấp nhận, một connection sẽ hình thành cho phép server và client giao tiếp với nhau.

Cụ thể hơn, các bước tiến hành trên server và client mà ta cần thực hiện sử dụng giao thức TCP/IP trong C# (có thể chạy server và client trên cùng một máy):

Server:

  • Tạo một đối tượng System.Net.Sockets.TcpListener để bắt đầu “lắng nghe” trên một cổng cục bộ.
  • Đợi và chấp nhận kết nối từ client với phương thức AccepSocket(). Phương thức này trả về một đối tượng System.Net.Sockets.Socket dùng để gửi và nhận dữ liệu.
  • Thực hiện giao tiếp với client.
  • Đóng Socket.

Thông thường quy trình này sẽ được đặt trong một vòng lặp (lặp lại bước 2) để chấp nhận nhiều kết nối cùng lúc (sử dụng Thread) hoặc các kết nối lần lượt.

Client:

  • Tạo một đối tượng System.Net.Sockets.TcpClient
  • Kết nối đến server với địa chỉ và port xác định với phương thức TcpClient.Connect()
  • Lấy luồng (stream) giao tiếp bằng phương thức TcpClient.GetStream().
  • Thực hiện giao tiếp với server.
  • Đóng luồng và socket.

Quy trình này có thể được minh họa theo mô hình sau:




Very Happy Very Happy Very Happy

PhanPhamDanPhuong(I22B)

Tổng số bài gửi : 7
Join date : 09/03/2013
Age : 27

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Sockets

Bài gửi  AnhDao(I22B) on 19/3/2013, 11:20

À , chào bạn Mạnh Huy . Mình chỉ muốn tham khảo ý kiến của Thầy và các bạn về vấn đề này có thể mở rộng ra được hay không thôi bạn ạ . Nếu có ý tưởng mà sợ code dài , thì sao mà tiếp tục phát huy hả bạn ??? Mình chỉ nêu như vậy để sau này áp dụng vào thực tế khi cần nó thôi. Còn trên lớp mình thấy Thầy dạy thế là đủ rồi . Mình K0 yêu cầu thêm.
Cảm ơn bạn !!!

AnhDao(I22B)

Tổng số bài gửi : 52
Join date : 09/03/2013
Age : 26
Đến từ : HoChiMinh

Xem lý lịch thành viên

Về Đầu Trang Go down

Ý kiến câu hỏi của bạn ....

Bài gửi  PhanPhamDanPhuong(I22B) on 19/3/2013, 11:31

AnhDao(I22B) đã viết:Thầy ơi , cho e hỏi
Như ví dụ thầy đưa lên bảng trong phần TCP sever --> tcpsever.exe và TCP Client -->tcpClient.exe ( double)
.........
.........
Nhưng Khi hiện lên từng TCPClient của bạn nào , bạn ấy nhận được 1 lời chào đúng số TCPClient của bạn ấy . không hiển thị chung như trên ???
Liệu làm như vậy có được k0?
Câu hỏi hơi điên rồ , nhưng thực tế nhé . Thầy và các bạn cho e xin hướng giải quyết ạ .

Theo như điều Đào hỏi Thầy , mình nghĩ có thể làm được . Tương tự như ví dụ của Thầy về việc Thầy phát triển chương trình phát âm tiếng việt trên nền Vn Voice để thành chương trình mới của Thầy đọc được từ unicode. Trong việc viết quá 130 kí tự nó sẽ ko đọc nữa... Thầy áp dụng ngắt nhỏ từng đoạn dưới 100 kí tự để nó có thể đọc hoàn thành hết đoạn văn bản dài.
Với vấn đề của bạn mình nghĩ khi Server trả lời dài như vậy, cũng có thể áp dụng việc ngắt nhỏ tương tự như vậy để server đưa từng đoạn văn bản ngắn đến cho từng client (theo thứ tự hoặc ID) . Có thể viết code ngắt tại "khoảng trắng", dấu "-", dấu ".", dấu ";" ....v.v.... Ý kiến của mình như thế, nhưng ko biết có triển khai đc không? Laughing

PhanPhamDanPhuong(I22B)

Tổng số bài gửi : 7
Join date : 09/03/2013
Age : 27

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  TranBinhCongLuanI12A on 20/3/2013, 00:16

AnhDao(I22B) đã viết:Chào bạn !
Mình hỉu ý thứ 2 của bạn . Mình cũng đã trình bày ở ví dụ trên rồi , Nhưng vấn đề mình muốn mở rộng ra như sau :
+ Mình muốn dùng chỉ 1 câu trả lời duy nhất từ sever " chào em TCP1, TCP2, TCP3, ..., TCP100" , câu trả lời này được chuyển đến từng client
+ Nhưng khi client nhận dc ko phải là văn bản chung như trên. mà phải đúng với từng TCP
Cụ Thể : sever " chào em TCP1, TCP2, TCP3, ..., TCP100"
TCP1 nhận dc : " chào e TCP1 "
TCP2 nhận dc : " chào e TCP2 "
.....
TCP100 nhận dc : " chào e TCP100 "

+ Mình muốn chỉ 1 lần trả lời , nhưng nó tự tách ra ,tìm và trả lời đúng client của nó ....
Liệu có làm vậy dc k0?

Cảm ơn bạn nha .... hj flower
Hi bạn,
Khi client kết nối vào server thì server đã lưu được các thông tin của client rồi nên khi gởi nó sẽ đúng client.
vd: (Mô tả của mình dùng Code C# và làm việc trên cơ chế TCP/IP)
Code:

struct ClientInfo
{
String UserName;
Socket client;
// Các thông tin khác nếu cần
}

List<ClientInfo> lstClient = new List<ClientInfo>();

// Mỗi khi Client kết nối thì thêm vào [b]lstClient[/b]
// Mỗi khi Client ngắt kết nối thì xóa khỏi [b]lstClient[/b]

//Khi server click gởi, duyệt danh sách lstClient để lấy Socket và tên của Client cần gởi
foreach (ClientInfo _sk in lstClient)
{
// Vì cơ chế TCP/IP gởi và nhận dữ liệu theo kiểu byte
      byte[] buff = new byte[1024];
      string text = "Xin chào: " + _sk.UserName;
// Chuyển chuỗi text sang dạng byte và gán vào biến buff
      buff = TextToByte(text);// Hàm TextToByte phải tự viết
//Gởi tới client cụ thể thông qua socket ghi nhận trong lstClient
      _sk.client.Send(buff, buff.Length, SocketFlags.None);
}

Chúc bạn thành công!

TranBinhCongLuanI12A

Tổng số bài gửi : 51
Join date : 20/02/2012
Age : 29

Xem lý lịch thành viên http://www.2dollarmayman.com

Về Đầu Trang Go down

Học hỏi kinh nghiệm

Bài gửi  QuangMinhTuan(I22B) on 20/3/2013, 10:50

Chào các bạn, mình đã lâu không đụng đến ngôn ngữ lập trình, vì vậy có thể gọi là người trở về hoặc người mới. Theo các bạn, mình nên tìm đọc các tài liệu nào để dể tiếp thu các ngôn ngữ này, ít nhất cũng là ngôn ngữ VB.
Thanks!

QuangMinhTuan(I22B)

Tổng số bài gửi : 17
Join date : 08/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  AnhDao(I22B) on 20/3/2013, 11:06

Um, mình cảm ơn bạn Luân và Phan Phương nhìu nhé, để mình thử xem sao ...........

AnhDao(I22B)

Tổng số bài gửi : 52
Join date : 09/03/2013
Age : 26
Đến từ : HoChiMinh

Xem lý lịch thành viên

Về Đầu Trang Go down

So sánh 2 giao thức TCP và UDP

Bài gửi  VoMinhDien(I22B) on 20/3/2013, 11:11

UDP (User Datagram Protocol) là một trong những giao thức cốt lõi của giao thức TCP/IP. Dùng UDP, chương trình trên mạng máy tính có thể gởi những dữ liệu ngắn được gọi là datagram tới máy khác. UDP không cung cấp sự tin cậy và thứ tự truyền nhận mà TCP làm; các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo. Tuy nhiên UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian. Do bản chất không trạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu.

TCP (Transmission Control Protocol - "Giao thức điều khiển truyền vận") là một trong các giao thức cốt lõi của bộ giao thức TCP/IP. Sử dụng TCP, các ứng dụng trên các máy chủ được nối mạng có thể tạo các "kết nối" với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin. Giao thức này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng thứ tự. TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịch vụ Web và dịch vụ thư điện tử) đồng thời chạy trên cùng một máy chủ.

So sánh một cách đơn giản :

Giống nhau : đều là các giao thức mạng TCP/IP, đều có chức năng kết nối các máy lại với nhau, và có thể gửi dữ liệu cho nhau....

Khác nhau (cơ bản):
các header của TCP và UDP khác nhau ở kích thước (20 và 8 byte) nguyên nhân chủ yếu là do TCP phải hộ trợ nhiều chức năng hữu ích hơn(như khả năng khôi phục lỗi). UDP dùng ít byte hơn cho phần header và yêu cầu xử lý từ host ít hơn
TCP :
- Dùng cho mạng WAN
- Không cho phép mất gói tin
- Đảm bảo việc truyền dữ liệu
- Tốc độ truyền thấp hơn UDP
UDP:
- Dùng cho mạng LAN
- Cho phép mất dữ liệu
- Không đảm bảo.
- Tốc độ truyền cao, VolP truyền tốt qua UDP

TCP hoạt động theo hướng kết nối (connection-oriented), trước khi truyền dữ liệu giữa 2 máy, nó thiết lập một kết nối giữa 2 máy theo phương thức "bắt tay 3 bước (three-way-hand-shake)" bằng cách gửi gói tin ACK từ máy đích sang máy nhận, trong suốt quá trình truyền gói tin, máy gửi yêu cầu máy đích xác nhận đã nhận đủ các gói tin đã gửi, nếu có gói tin bị mất, máy đích sẽ yêu cầu máy gửi gửi lại, thường xuyên kiểm tra gói tin có bị lỗi hay ko, ngoài ra còn cho phép qui định số lượng gói tin được gửi trong một lần gửi (window-sizing), điều này đảm bảo máy nhận nhận được đầy đủ các gói tin mà máy gửi gửi đi --> truyền dữ liệu chậm hơn UDP nhưng đáng tin cậy hơn UDP

UDP hoạt động theo hướng ko kết nối (connectionless), ko y/c thiết lập kết nối giữa 2 máy gửi và nhận, ko có sự đảm bảo gói tin khi truyền đi cũng như ko thông báo về việc mất gói tin, ko kiểm tra lỗi của gói tin
--> truyền dữ liệu nhanh hơn UDP do cơ chế hoạt động có phần đơn giản hơn tuy nhiên lại ko đáng tin cậy bằng TCP

TCP và UDP là 02 Protocol hoạt động ở lớp thứ 04 (Transport Layer) của mô hình OSI và ở lớp thứ 02 (Transport Layer) mô hình TCP/IP
(xin lưu ý: mô hình TCP/IP (TCP/IP Model ) khác hoàn toàn với chồng giao thức TCP/IP (TCP/IP Suite)

TCP là giao thức truyền tin cậy và phải bắt tay ba bước (three-way-hand-shake) nên khi Server không nhận được bất kỳ gói tin ACK từ Client gửi trả lời thì Server sẽ gửi lại gói tin đã thất lạc. Server sẽ gửi cho đến khi nhận được ACK của Client mới thôi => Điều này cũng là một nhân tố làm chậm và ngốn băng thông đường truyền.

Ý chủ bài viết muốn nói lên TCP dành cho các ứng dụng secure. đối với các ứng dụng không cần secure thì dùng UDP là được, lợi hơn về performance. finding DC thì không cần secure, LDAP tất nhiên cần secure.

Mặc dù tổng lượng lưu thông của UDP trên mạng thường chỉ vài phần trăm, nhưng có nhiều ứng dụng quan trọng dùng UDP, bao gồm DNS, SNMP, DHCP và RIP, dễ thấy hơn là điện thoại IP, xem truyền hình trực tiếp...

Thực tế UDP dùng nhiều cho việc truyền tải Games Online. Như các bạn biết đó...việc nâng cấp sửa lỗi games các nhà quản trị Games và Bảo mật thường xuyên cập nhật bản vá lỗi của games, hoặc các thông tin dẫn truyền trong games đều dùng UDP rất nhiều. Nói TCP bảo mật hơn thì cũng đúng, nhưng UDP cũng rất bảo mật điều này phụ thuộc vào mức độ mã hóa của các Package trong liên kết truyền thông. Nghiên cứu thêm trong An Toàn Bảo Mật Thông Tin...hehe
Để biết máy tính có dùng UDP hay TCP thi banjn có thể thao khảo Sys Tools...những công cụ kiểm tra hệ thống và xem trên Router, check Port Connection....(Tất cả nằm trên anh Google...)

"Tiền nào của nấy". Sử dụng TCP có rất nhiều ưu điểm, nhưng ngược lại chi phí đắt.
Khi mà ứng dụng không yêu cầu quá cao về chất lượng, có thể chấp nhận việc mất thông tin và trễ về thời gian (như điện thoại internet, media...) thì việc sử dụng UDP thay vì TCP sẽ tiết kiệm được nhiều chi phí.
- Ngoài ra:
+ UDP có độ trễ nhỏ, do không có giai đoạn thiết lập đường truyền
+ UDP nó đơn giản: Phía gửi và phía nhận không phải ghi nhớ trạng thái gửi/nhận.
+ small segment header
+ Không có cơ chế kiểm soát tắc nghẽn, do đó bên gửi có thể gửi dữ liệu với tốc độ tối đa

Các bạn có thể thấy UDP được sd nhiều trong : NTP, DNS, MDNS, BOOTP, DHCP, SysLog, NFS, ISAKMP, Cisco HSRP, Cisco MGCP,...

Hai ứng dụng phổ biến là Yahoo Messenger sử dụng TCP/IP và Skype sử dụng UDP.

VoMinhDien(I22B)

Tổng số bài gửi : 34
Join date : 11/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  MaiXuanSon (I22B) on 20/3/2013, 16:05

AnhDao(I22B) đã viết:Thầy ơi , cho e hỏi
Như ví dụ thầy đưa lên bảng trong phần TCP sever --> tcpsever.exe và TCP Client -->tcpClient.exe ( double)
Ta kết nối 2 cổng TCP Client1 và TCP Client2 vào 1 cổng TCP Sever . Tiến trình như sau :
- TCP Client 1 nhập " Chào Thầy totuan1 " , nó sẽ hiện lên TCP Sever . Tương tự
- TCP Client 2 nhập " Chào Thầy totuan2 " , nó sẽ hiện lên TCP Sever
- TCP Sever click vào TCP Client1 trả lời " Chào e TCP1 " , nó sẽ hiện lên TCP Client 1 . Tương tự
- TCP Sever click vào TCP Client2 trả lời " Chào e TCP2 " , nó sẽ hiện lên TCP Client 2
Với chức năng, khi check vào nút Metiselect ( chọn nhiều , để có 1 câu trả lời , gửi đi nhiều nơi )
- Ta check vào TCP Client 1, TCP Client 2 , gửi " chào e TCP1 Và TCP2 ".
Nó hiện ra dòng văn bản trên TCP Client 1, TCP Client 2 là như nhau.

Giả sử , trong lớp I22B có 100 học sinh, đều chào Thầy như vậy, Thầy ko thể chọn từng TCPClient để trả lời từng bạn vì quá nhiều và tốn thời gian. Hoặc với dòng Văn bản " chào e TCP1 .... TCP100 " , nhiều bạn không muốn Thầy trả lời chung như vậy .
Vậy theo em, Thầy có cách nào để khi Nhập Văn bản vào.
"Chào e
TCP1
TCP2
....
TCP100"

Nhưng Khi hiện lên từng TCPClient của bạn nào , bạn ấy nhận được 1 lời chào đúng số TCPClient của bạn ấy . không hiển thị chung như trên ???
Liệu làm như vậy có được k0?

Câu hỏi hơi điên rồ , nhưng thực tế nhé . Thầy và các bạn cho e xin hướng giải quyết ạ .


Cùng câu hỏi với bạn này, có bạn nào giúp với?





MaiXuanSon (I22B)

Tổng số bài gửi : 49
Join date : 11/03/2013
Age : 31

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  MaiXuanSon (I22B) on 20/3/2013, 16:10

AnhDao(I22B) đã viết:Chào bạn !
Mình hỉu ý thứ 2 của bạn . Mình cũng đã trình bày ở ví dụ trên rồi , Nhưng vấn đề mình muốn mở rộng ra như sau :
+ Mình muốn dùng chỉ 1 câu trả lời duy nhất từ sever " chào em TCP1, TCP2, TCP3, ..., TCP100" , câu trả lời này được chuyển đến từng client
+ Nhưng khi client nhận dc ko phải là văn bản chung như trên. mà phải đúng với từng TCP
Cụ Thể : sever " chào em TCP1, TCP2, TCP3, ..., TCP100"
TCP1 nhận dc : " chào e TCP1 "
TCP2 nhận dc : " chào e TCP2 "
.....
TCP100 nhận dc : " chào e TCP100 "

+ Mình muốn chỉ 1 lần trả lời , nhưng nó tự tách ra ,tìm và trả lời đúng client của nó ....
Liệu có làm vậy dc k0?

Cảm ơn bạn nha .... hj flower


Cùng ý kiến với bạn, nhờ thầy giúp đỡ. Cảm ơn Thầy

MaiXuanSon (I22B)

Tổng số bài gửi : 49
Join date : 11/03/2013
Age : 31

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Sockets

Bài gửi  LeThanhQuang (I22B) on 21/3/2013, 00:52

AnhDao(I22B) đã viết:Chào bạn !
Mình hỉu ý thứ 2 của bạn . Mình cũng đã trình bày ở ví dụ trên rồi , Nhưng vấn đề mình muốn mở rộng ra như sau :
+ Mình muốn dùng chỉ 1 câu trả lời duy nhất từ sever " chào em TCP1, TCP2, TCP3, ..., TCP100" , câu trả lời này được chuyển đến từng client
+ Nhưng khi client nhận dc ko phải là văn bản chung như trên. mà phải đúng với từng TCP
Cụ Thể : sever " chào em TCP1, TCP2, TCP3, ..., TCP100"
TCP1 nhận dc : " chào e TCP1 "
TCP2 nhận dc : " chào e TCP2 "
.....
TCP100 nhận dc : " chào e TCP100 "

+ Mình muốn chỉ 1 lần trả lời , nhưng nó tự tách ra ,tìm và trả lời đúng client của nó ....
Liệu có làm vậy dc k0?

Cảm ơn bạn nha .... hj flower

Ý của bạn rất hay nhưng theo mình nghĩ để giải quyết câu trả lời của bạn thì ta sẽ xét hai trường hợp
- TH1: là tên của những bạn ngồi với máy Client nào sẽ phải trùng với tên của máy TCP Client đó
+ Lúc đó ta sẽ áp dụng cách của bạn "CongLuan" là ổn nhất.
+ Còn nếu làm như ý của bạn là nhập trên máy sever " chào em TCP1, TCP2, TCP3, ..., TCP100" thì ta chỉ việc cho một đoạn code kiểm tra text nào trùng với tên của máy Client thì trả kết quả tương ứng (nhưng cái này không thực tế vì nó tốn nhiều thời gian của người dùng để nhập tên)
- TH2: là một tên tùy ý ở từng máy Client
ví dụ: TCP1: chào thầy em là Tuấn
TCP2: chào thầy em là Nam
Những nội dung này nó chỉ là dạng text nên theo mình nó không thể nào phân biệt được tên người hay nội dung nên câu hỏi của bạn đặt ra là không thể khả thi được.
Trừ khi bạn sẽ phải có một qui định để nhận biết tên người và nội dung như ví dụ trên của mình, dấu hiệu nhận biết là chữ cái bắt đầu là chữ hoa và kết thúc là khoảng trắng, lúc đó ta dùng đoạn code kiểm tra đoạn text ở từng máy Client kết hợp với biện pháp của bạn "CongLuan" thỉ câu hỏi của bạn mới có đáp án như ý được.
Very Happy Very Happy Very Happy

Admin
- Rất đúng với ý thày. Chưa trả lời là để chờ ý kiến này "xuất hiện" !
- Cảm giác rằng bạn AnhDao hơi "phóng đại" vấn đề !

LeThanhQuang (I22B)

Tổng số bài gửi : 15
Join date : 16/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  TranBinhCongLuanI12A on 22/3/2013, 17:08

QuangMinhTuan(I22B) đã viết:Chào các bạn, mình đã lâu không đụng đến ngôn ngữ lập trình, vì vậy có thể gọi là người trở về hoặc người mới. Theo các bạn, mình nên tìm đọc các tài liệu nào để dể tiếp thu các ngôn ngữ này, ít nhất cũng là ngôn ngữ VB.
Thanks!
Hi bạn
Theo mình, Giữa 2 ngôn ngữ VB6 và .Net thì có sự khác biệt khá lớn
Còn giữa VB.Net và C#.Net nó ko có khác nhau là mấy, chỉ khác nhau cách khai báo thôi nên khi làm được trên 1 ngôn trong 2 ngôn ngữ trên thì bạn có thể sử dụng cho cả 2.
Mình thì khuyên bạn sử dụng C#, vì nhìn dòng lệnh nó cũng khá rõ ( cuối lệnh phải có dấu ';' ) đọc code hoặc viết code cũng rõ ràng hơn Smile

TranBinhCongLuanI12A

Tổng số bài gửi : 51
Join date : 20/02/2012
Age : 29

Xem lý lịch thành viên http://www.2dollarmayman.com

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  HaVanMinh(I22A) on 22/3/2013, 22:25

PhanPhamDanPhuong(I22B) đã viết:
AnhDao(I22B) đã viết:Thầy ơi , cho e hỏi
Như ví dụ thầy đưa lên bảng trong phần TCP sever --> tcpsever.exe và TCP Client -->tcpClient.exe ( double)
.........
.........
Nhưng Khi hiện lên từng TCPClient của bạn nào , bạn ấy nhận được 1 lời chào đúng số TCPClient của bạn ấy . không hiển thị chung như trên ???
Liệu làm như vậy có được k0?
Câu hỏi hơi điên rồ , nhưng thực tế nhé . Thầy và các bạn cho e xin hướng giải quyết ạ .

Theo như điều Đào hỏi Thầy , mình nghĩ có thể làm được . Tương tự như ví dụ của Thầy về việc Thầy phát triển chương trình phát âm tiếng việt trên nền Vn Voice để thành chương trình mới của Thầy đọc được từ unicode. Trong việc viết quá 130 kí tự nó sẽ ko đọc nữa... Thầy áp dụng ngắt nhỏ từng đoạn dưới 100 kí tự để nó có thể đọc hoàn thành hết đoạn văn bản dài.
Với vấn đề của bạn mình nghĩ khi Server trả lời dài như vậy, cũng có thể áp dụng việc ngắt nhỏ tương tự như vậy để server đưa từng đoạn văn bản ngắn đến cho từng client (theo thứ tự hoặc ID) . Có thể viết code ngắt tại "khoảng trắng", dấu "-", dấu ".", dấu ";" ....v.v.... Ý kiến của mình như thế, nhưng ko biết có triển khai đc không? Laughing
Bạn Huy ở trên có nói ý đúng. Mọi việc xuất phát từ ý tưởng thôi , Hi... Mình chỉ test tới hàng chục để rèn luyện kỹ năng lập trình thôi . Còn giả dụ có tới TCP 100 đi chăng nữa , liệu bạn có cảm thấy việc có thể đủ time ngồi đõ gõ hết 100 tên các máy client ra chỉ để test thôi ,hay giải quyết bài toán theo cách tổng quát được không? Hi . Mình mong sau khi học xong môn này ai cũng có kỹ năng "phát minh " ra các cách làm khác nhau!!!
Thanks!

HaVanMinh(I22A)

Tổng số bài gửi : 4
Join date : 22/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  NguyenHoangKimVu (I11C) on 22/3/2013, 22:47

TranBinhCongLuanI12A đã viết:Chào các bạn, mình đã lâu không đụng đến ngôn ngữ lập trình, vì vậy có thể gọi là người trở về hoặc người mới. Theo các bạn, mình nên tìm đọc các tài liệu nào để dể tiếp thu các ngôn ngữ này, ít nhất cũng là ngôn ngữ VB.
Thanks!
Bạn nên xem lại C, C++ vì nó là nền tảng và cơ bản nhất. Hiểu nó rõ rồi thì mấy ngôn ngữ sau này sẽ dễ sử dụng hơn.

NguyenHoangKimVu (I11C)

Tổng số bài gửi : 62
Join date : 25/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  ChauQuangCam (I22B) on 23/3/2013, 01:07

AnhDao(I22B) đã viết:Thầy ơi , cho e hỏi
Như ví dụ thầy đưa lên bảng trong phần TCP sever --> tcpsever.exe và TCP Client -->tcpClient.exe ( double)
Ta kết nối 2 cổng TCP Client1 và TCP Client2 vào 1 cổng TCP Sever . Tiến trình như sau :
- TCP Client 1 nhập " Chào Thầy totuan1 " , nó sẽ hiện lên TCP Sever . Tương tự
- TCP Client 2 nhập " Chào Thầy totuan2 " , nó sẽ hiện lên TCP Sever
- TCP Sever click vào TCP Client1 trả lời " Chào e TCP1 " , nó sẽ hiện lên TCP Client 1 . Tương tự
- TCP Sever click vào TCP Client2 trả lời " Chào e TCP2 " , nó sẽ hiện lên TCP Client 2
Với chức năng, khi check vào nút Metiselect ( chọn nhiều , để có 1 câu trả lời , gửi đi nhiều nơi )
- Ta check vào TCP Client 1, TCP Client 2 , gửi " chào e TCP1 Và TCP2 ".
Nó hiện ra dòng văn bản trên TCP Client 1, TCP Client 2 là như nhau.

Giả sử , trong lớp I22B có 100 học sinh, đều chào Thầy như vậy, Thầy ko thể chọn từng TCPClient để trả lời từng bạn vì quá nhiều và tốn thời gian. Hoặc với dòng Văn bản " chào e TCP1 .... TCP100 " , nhiều bạn không muốn Thầy trả lời chung như vậy .
Vậy theo em, Thầy có cách nào để khi Nhập Văn bản vào.
"Chào e
TCP1
TCP2
....
TCP100"

Nhưng Khi hiện lên từng TCPClient của bạn nào , bạn ấy nhận được 1 lời chào đúng số TCPClient của bạn ấy . không hiển thị chung như trên ???
Liệu làm như vậy có được k0?

Câu hỏi hơi điên rồ , nhưng thực tế nhé . Thầy và các bạn cho e xin hướng giải quyết ạ .









Nếu ta cho 100 client kết nối tới server. Thì server có tạo ra 100 socket tương ứng với từng client hay không? Nếu có, giả sử số lượng client kết nối quá lớn thì việc tạo ra socket như vậy có ảnh hưởng lớn đến hệ thống hay không? Ngược lại, thì server quản lí Socket như thế nào khi client kết nối?
- Thầy và các bạn nào hiểu giải thích cho em với Exclamation

Admin
Tham khảo ứng dụng WinSockTCPSinglePortUnicode !


Được sửa bởi ChauQuangCam (I22B) ngày 25/3/2013, 10:48; sửa lần 1. (Reason for editing : Em cám ơn thầy chỉ dẫn ạ!!!)

ChauQuangCam (I22B)

Tổng số bài gửi : 23
Join date : 11/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Code TCP

Bài gửi  xuantri27 (I11C) on 23/3/2013, 14:14

//dùng cho server
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class BadTcpSrvr
{
public static void Main()
{
int recv;
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
newsock.Bind(ipep);
newsock.Listen(10);
Console.WriteLine("Waiting for a client...");
Socket client = newsock.Accept();
string welcome = "Welcome to my test server";
data = Encoding.ASCII.GetBytes(welcome);
client.Send(data, data.Length,
SocketFlags.None);
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Connected with {0} at port {1}",
newclient.Address, newclient.Port);
for (int i = 0; i < 5; i++)
{
recv = client.Receive(data);
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
}
Console.WriteLine("Disconnecting from {0}", newclient.Address);
client.Close();
newsock.Close();
}
}
//dùng cho client
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class BadTcpClient
{
public static void Main()
{
byte[] data = new byte[1024];
string stringData;
IPEndPoint ipep = new IPEndPoint(
IPAddress.Parse("127.0.0.1"), 9050);
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
try
{
server.Connect(ipep);
} catch (SocketException e)
{
Console.WriteLine("Unable to connect to server.");
Console.WriteLine(e.ToString());
return;
}
int recv = server.Receive(data);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(stringData);
server.Send(Encoding.ASCII.GetBytes("message 1"));
server.Send(Encoding.ASCII.GetBytes("message 2"));
server.Send(Encoding.ASCII.GetBytes("message 3"));
server.Send(Encoding.ASCII.GetBytes("message 4"));
server.Send(Encoding.ASCII.GetBytes("message 5"));
Console.WriteLine("Disconnecting from server...");
server.Shutdown(SocketShutdown.Both);
server.Close();
}
}

****chạy đoạn code còn nhiều thiếu sót mong các bạn giúp đỡ****

xuantri27 (I11C)

Tổng số bài gửi : 5
Join date : 27/02/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Tham khảo: Các Thuộc Tính của Winsock Control !

Bài gửi  NguyenQuocHuy (I22B) on 24/3/2013, 21:13

1/ BytesReceived

Trả về một giá trị kiểu long chỉ dung lượng của dữ liệu nhận được (đang trong bộ đệm).

Chú ý: Không sử dụng ở Design time. Không thay đổi giá trị này được (thuộc tính chỉ đọc)

CODE

Dim lngBuffer As Long
lngBuffer = winsock1.BytesReceived

winsock1 là tên của winsock control, bạn có thể thay đổi tên của winsock control trong project của bạn bằng thuộc tính Name

2/ LocalHostName

Trả về một chuỗi (string) là tên của máy tính đang chạy ứng dụng winsock. Chỉ có giá trị khi ứng dụng đang thực thi. Thuộc tính chỉ đọc

CODE

Dim strLocalName as String
strLocalName=winsock1.LocalHostName

3/ LocalIP

Trả về một chuỗi là IP của máy hiện hành dưới dạng xxx.xxx.xxx.xxx
Chỉ có giá trị khi đang thực thi, thuộc tính chỉ đọc.

CODE

Dim strLocalIP As String
strLocalIP = winsock1.LocalIP

4/ LocalPort

Trả về hay thiết đặt giá trị của local port. Kiểu dữ liệu long

CODE

winsock1.LocalPort = long value
value = winsock1.LocalPort

ví dụ:

CODE

winsock1.LocalPort = 46000
Dim lngPort As Long
lngPort = winsock1.LocalPort



5/ Protocol

Dùng để lấy hay thiết đặt Protocol (giao thức) đang được thiết đặt. Gồm 2 giá trị TCP và UDP.

CODE

winsock1.Protocol = protocol
value = winsock1.Protocol

Protocol gồm 2 hằng số
0 = sckTCPProtocol Giao thức TCP, Mặc định
1 = sckUDPProtocol Giao thức UDP
Chú ý: trước khi thiết đặt giá trị cho thuộc tính này, bạn cần phải đóng Winsock trước. Để đóng winsock, xem Close method.

6/ RemoteHost

Lấy hay đặt giá trị cho máy remote (máy tính sẽ connect tới). Bạn có thể sử dụng URL hay IP dạng chuỗi xxx.xxx.xxx.xxx để đặt giá trị cho thuộc tính này

CODE

winsock1.RemoteHost = string
stringvalue = winsock1.RemoteHost

ví dụ

CODE

+ winsock1.RemoteHost = “http://www.hvaonline.net”
+ winsock1.RemoteHost = “123.213.111.222”
+ Dim strRemoteName As String
strRemoteName = winsock1.RemoteHost


7/ RemoteHostIP

Trả về một chuỗi là địa chỉ IP của máy từ xa.

CODE

Dim strRemoteIP As String
strRemoteIP=winsock1.RemoteHostIP


8/ RemotePort

Nhận hay thiết đặt một giá trị kiểu long cho port trên máy sẽ connect tới

CODE

Dim lngRemotePort As Long
winsock1.RemotePort = lngRemotePort
hoặc: lngRemotePort = winsock1.RemotePort

Giá trị mặc định cho thuộc tính này là port 80

9/ State

Trả về một hằng số kiểu nguyên (Integer) chỉ status của winsock control.

CODE

Dim intStatus As Integer
intStatus= winsock1.State

Các hằng số của thuộc tính này được liệt kê trong bảng sau:

sckClosed 0 Mặc định, đóng
sckOpen 1 Mở
sckListening 2 Đang lắng nghe
sckConnectionPending 3 Kết nối đang tiến hành
sckResolvingHost 4 đang chuyển đổi tên host
sckHostResolved 5 chuyển đổi host hoàn thành
sckConnecting 6 đang kết nối
sckConnected 7 kết nối hoàn thành
sckClosing 8 Peer đang đóng kết nối
sckError 9 Lỗi kết nối

NguyenQuocHuy (I22B)

Tổng số bài gửi : 49
Join date : 10/03/2013

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  TranBinhCongLuanI12A on 25/3/2013, 14:17

NguyenHoangKimVu (I11C) đã viết:
TranBinhCongLuanI12A đã viết:Chào các bạn, mình đã lâu không đụng đến ngôn ngữ lập trình, vì vậy có thể gọi là người trở về hoặc người mới. Theo các bạn, mình nên tìm đọc các tài liệu nào để dể tiếp thu các ngôn ngữ này, ít nhất cũng là ngôn ngữ VB.
Thanks!
Bạn nên xem lại C, C++ vì nó là nền tảng và cơ bản nhất. Hiểu nó rõ rồi thì mấy ngôn ngữ sau này sẽ dễ sử dụng hơn.
Hi!
Đề tài này là QuangMinhTuan(I22B) viết, nhưng không hiểu sao bạn Quote thành mình Smile

Mình thì lại ko tán đồng với ý kiến trên của bạn.
Đúng là C,C++ nó là nền tảng và cơ bản nhất, nhưng việc lập trình trên 1 môi trường trực quan
với 1 môi trường toàn là dòng lệnh thì bạn nghĩ sẽ tiếp thu cái nào nhanh hơn Very Happy

TranBinhCongLuanI12A

Tổng số bài gửi : 51
Join date : 20/02/2012
Age : 29

Xem lý lịch thành viên http://www.2dollarmayman.com

Về Đầu Trang Go down

Re: Lập trình Socket

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 1 trong tổng số 2 trang 1, 2  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết