2009-11-26 18 views
12

Tôi có hai ứng dụng C# và tôi muốn một trong số họ gửi hai số nguyên cho một số khác (điều này không cần phải nhanh vì nó chỉ được gọi một lần sau vài giây).Cách dễ nhất để thực hiện liên lạc quy trình liên thông trong C# là gì?

Cách dễ nhất để thực hiện việc này là gì? (Nó không phải là một trong những thanh lịch nhất.)

+0

Gần trùng lặp: http://stackoverflow.com/questions/232332 và http://stackoverflow.com/questions/833376 –

Trả lời

0

Tôi muốn nói làm cho họ nói chuyện qua một ổ cắm.

Có một chương trình listen trên ổ cắm và có connect khác trước tiên. Gửi hai số nguyên trên một dòng, dưới dạng các chuỗi chữ số.

Câu hỏi duy nhất là cách họ nên đồng ý về số cổng và cách họ biết họ đang nói chuyện với nhau. Họ có thể đồng ý về số cổng bởi bạn quyết định họ nên luôn luôn sử dụng cổng 12345 (nói), và giải pháp bẩn-hack cho phần thứ hai là chỉ tin tưởng bất cứ ai mà bạn đang nói chuyện để trở thành một chàng trai tốt.

+0

Thực ra, theo như tôi nhớ, bạn có thể chỉ định địa chỉ nào chấp nhận kết nối (hoặc tại ít nhất là kiểm tra xem địa chỉ nào đang đến, và nếu nó không phải là localhost ... tốt, đừng bao giờ nói chuyện với người lạ;)). – Bobby

0

Một cách khác là bắt chước một đường ống có tên. Khai báo một tệp ở đâu đó và đọc từ/ghi vào nó. Hoặc, nếu các chương trình được thực hiện theo thứ tự, bạn có thể thử clipboard ... nhưng giải pháp đó là xấu xí như địa ngục và là lỗi (đôi khi .NET không thể truy cập vào clipboard không có lý do).

+1

Tôi mạnh mẽ không đồng ý với phần clipboard. Và tôi thấy không có điểm trong * bắt chước * một ống tên, khi bạn chỉ có thể sử dụng các đường ống được đặt tên thực tế? – Groo

0

Mutex có thể là một tùy chọn; vui lòng đọc: Inter-Process Data Exchange using .NET 2.0

Để hoàn chỉnh, bạn cũng có thể sử dụng net.pipeWCF.

+0

Mutexes được sử dụng để đồng bộ hóa, không chuyển dữ liệu. – Groo

+0

đã xóa Groo, ty –

15

Cách dễ nhất và đáng tin cậy nhất gần như chắc chắn là IpcChannel (a.k.a. Kênh truyền thông xử lý liên tiếp); đó là những gì nó có cho. Bạn có thể làm cho nó hoạt động với một vài dòng mã và cấu hình.

+1

Rất đơn giản; dễ dàng, vv ... Cho đến nay là dễ nhất từ ​​những gì tôi nhìn thấy. – DaBlue

5

Bạn có thể thử .NET Remoting. Đây là một ví dụ đơn giản: CodeProject .NET Remoting.

Nếu bạn đang sử dụng .NET 3.5, bạn nên truy cập WCF, vì Remoting đang dần trở nên lỗi thời. Một lần nữa, có rất nhiều examples for WCF xung quanh.

2

Tôi đã tạo thư viện nguồn mở của riêng mình cho IPC nhanh chóng và dễ dàng hoạt động giữa các dịch vụ Windows, ứng dụng bảng điều khiển và các biểu mẫu Windows.

Nó có một số lợi thế so với việc triển khai IPC hiện tại và không yêu cầu bất kỳ cấu hình nào.

Xem here.