2015-10-16 13 views
6

Tôi biết câu hỏi này đã được hỏi nhiều lần ở đây trên SO, nhưng không phải là một chuỗi duy nhất đã giải quyết chính xác vấn đề mà chúng ta đang gặp phải tại thời điểm này.C# TcpClient, đọc và ghi luồng đồng thời

Về cơ bản, chúng tôi đang làm việc trên ứng dụng Máy chủ/ứng dụng khách TCP, nơi Máy chủ được viết bằng Java và Ứng dụng khách được viết bằng C#. Tôi đang ở bên Java và tôi đang sử dụng các luồng riêng biệt và đầu ra cho các bộ đệm của mình.

Vấn đề của chúng tôi là nếu khách hàng nhận được thư từ máy chủ và đọc những thư đó không đồng bộ ra bộ đệm và cố viết một cái gì đó vào trong quá trình đó, ngoại lệ được ném - không có gì ngạc nhiên.

Câu hỏi của tôi là: Con đường để đi trong trường hợp này là gì? Tạo các luồng riêng biệt? Chúng tôi đã thử điều đó rồi, nhưng có vẻ như C# không muốn chúng tôi làm vậy. Chúng tôi đang trong nhu cầu tuyệt vọng của một giải pháp ở đây, và bất kỳ trợ giúp được đánh giá rất nhiều!

+0

Về cơ bản, bạn cần một giải pháp trong C# để đọc và ghi đồng thời? phía java đang hoạt động? –

+0

Đúng, nó hoạt động. Chúng tôi vừa giải quyết vấn đề này - nhưng vẫn muốn biết liệu có cách nào để có các luồng tách biệt trong C# – Psylution

Trả lời

7

Không, nó sẽ hoạt động. Những gì bạn cần là TcpClient, mà bạn có thể đã có. Từ đó TcpClient.GetStream(), trả lại NetworkStream. Sau đó, thao tác đọc và ghi có thể xảy ra đồng thời/đồng thời mà không cần đồng bộ hóa. Vì vậy, đọc và viết có thể xảy ra trong cùng một thời gian.

Điều gì phải được đồng bộ hóa là nhiều lần đọc đồng thời. Tất cả các lần đọc đồng thời phải được đồng bộ hóa bởi lock(objReads).

Tương tự, nhiều bản ghi đồng thời phải được đồng bộ hóa theo lock(objWrites).

MSDN says, rằng nó được đảm bảo.

Xin lưu ý rằng tôi đã nói rõ rằng việc đọc và ghi có các khóa khác nhau.

+0

Chúng tôi đã giải quyết được vấn đề, vấn đề nằm ở phía chúng tôi - nhưng cảm ơn lời giải thích bổ sung! Bây giờ tôi cũng biết rằng tôi chỉ không _need_ phân luồng. – Psylution

+0

@ neil-patrao Cảm ơn bạn đã cải thiện câu trả lời :). – ipavlu

Các vấn đề liên quan