2010-10-05 41 views
5

Tôi đã nhìn thấy rất nhiều ví dụ về việc gửi dữ liệu tuần tự trên các socket trong Java, nhưng tất cả những gì tôi muốn là gửi một số số nguyên đơn giản và một chuỗi. Và, vấn đề là tôi đang cố gắng truyền đạt chúng đến một mã nhị phân được viết bằng C.Làm cách nào để gửi dữ liệu dưới dạng nhị phân qua ổ cắm Java?

Vì vậy, dòng dưới cùng: làm thế nào tôi có thể gửi một số byte qua một socket trong Java?

+0

Bạn có chắc chắn chương trình C và chương trình Java xử lý các chuỗi và chuỗi nhị phân theo cùng một cách không? Nếu không, hãy gửi chúng dưới dạng văn bản thuần tuý cũ. Nếu bạn không có kiểm soát của chương trình C đọc các ổ cắm sau đó bạn sẽ không có sự lựa chọn, nhưng để gửi dữ liệu trong bất cứ định dạng nó là chương trình C muốn. –

Trả lời

4

Tôi thực sự khuyên bạn không nên sử dụng thư viện Ổ cắm Java trực tiếp. Tôi đã tìm thấy Netty (từ JBoss) thực sự dễ thực hiện và thực sự mạnh mẽ. Lớp Netty ChannelBuffer đi kèm với một loạt các tùy chọn để viết các kiểu dữ liệu khác nhau và tất nhiên để có thể viết các bộ mã hóa và giải mã của riêng bạn để viết POJO xuống luồng nếu bạn muốn.

Trang này thực sự khởi động tốt - tôi có thể tạo một máy khách/máy chủ khá phức tạp với bộ mã hóa và giải mã tùy chỉnh trong vòng chưa đầy 30 phút đọc: http://docs.jboss.org/netty/3.2/guide/html/start.html.

Nếu bạn thực sự muốn sử dụng ổ cắm Java. Luồng đầu ra ổ cắm có thể được bao bọc trong một DataOutputStream cho phép bạn viết nhiều loại dữ liệu khác nhau, ví dụ:

new DataOutputStream(socket.getOutputStream()).writeInt(5); 

Tôi hy vọng điều đó hữu ích.

+0

DataOutputStream dường như hoạt động tốt. Ngày làm việc của tôi kết thúc, tôi sẽ quay lại vào ngày mai. – evilpenguin

+0

Hãy lưu ý rằng liên kết đến hướng dẫn này là dành cho phiên bản JBoss của Netty. Điều đó không khớp với API của tệp tải xuống netty.io mà hướng dẫn liên kết đến. Sử dụng http://netty.io/wiki/user-guide-for-4.x.html để thay thế – Speakjava

9

Bạn có thể sử dụng đơn giản OutputStream được cung cấp bởi Socket.
Từ đó bạn có thể write byte.

Nếu bạn muốn, bạn cũng có thể đóng gói luồng này trong một BufferedOutputStream để có bộ đệm.

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