30/09/2018, 19:51
Cho mình hỏi về socket trong lập trình
Cho mình hỏi lập trình socket trong các ngôn ngữ như Java và c# thì dữ liệu sẽ truyền đi kiểu gì ,thông qua gì và máy tính sẽ nhận nó ở chỗ nào không chỉ mình với mình đọc tài liệu nhưng tài liệu không nói về cái này.Làm mình cứ lập trình mà không hiểu về bản chất truyền nhận của nó.
Bài liên quan
Mình mô tả đơn giản thế này, socket giống như một bộ đệm mà dữ liệu vào ra. Sẽ có dữ liệu ghi vào, rồi bạn đọc ra từ đó. Các bước sử dụng là bạn khai báo rồi mở một socket, cột (bind) socket đó với thiết bị phần cứng nào, ví dụ như mạng, bluetooth, hay đơn giản một thiết bị ảo nào đó. Bạn có thể cài đặt các tuỳ chỉnh của socket đó như đọc theo luồng, đọc đồng bộ… Sau đó là bạn ghi dữ liệu vào socket đó, nó sẽ tự động ghi xuống thiết bị phần cứng và ngược lại. Cuối cùng khi không dùng thì bạn đóng socket
Socket là một khái niệm logic (không phải thật), so sánh với bộ đệm thì cũng hơi khiên cưỡng 1 chút.
Mô tả một chút về socket:
SourceIP, port, DestinationIP, port (chú ý: port cũng chỉ là một khái niệm logic nhé)
Ví dụ: 1 pair socket truyền từ server sang client: 192.168.185.129:80, 10.10.20.14:12345.
Socket chỉ là 1 khái niệm logic, nên 1 app server có thể được cắm rất nhiều phích cung cấp data cho rất nhiều app client.
Trở lại với câu hỏi của bạn:
PS: Java/ C# thường họ đã viết app implement socket API rồi nên bạn chỉ cần dùng thôi. Cách dùng là tạo 2 socket: 1 remote, 1 client, sau đó remote dẩy (thường được gọi là ghi vì cũng giống như vào ra của file, đối với UNIX thuyết thì tất cả đều được gọi là file. Nếu làm việc trên linux, bạn sẽ thấy các file như mysql.socket, … tuy nhiên nó không phải là file thật và cũng chẳng có gì ghi vào đó cả. Data sẽ sống trên RAM) dữ liệu qua socket remote -> chạy qua tuple tới socket client-> client đọc (giống với khái niệm ghi) đống data này.
Thêm 1 ý nữa là: socket pair thì giao tiếp là 2 chiều, nhưng 1 action thì phải có 1 thằng ghi và 1 thằng nhận. Do đó, không bao giờ app server và app client cùng ghi vào socket cả (cái này phải dùng cơ chế queue/bắt tay), cũng giống như một ống nước, 2 ông cùng đẩy nước vào ống thì ống chỉ có mà vỡ.