2010-06-01 43 views
19

Tôi đang cố gắng sử dụng các chức năng socket.h trong Windows. Về cơ bản, tôi hiện đang xem mã mẫu tại http://beej.us/guide/bgnet/output/html/multipage/clientserver.html#datagram. Tôi hiểu rằng socket.h là một chức năng Unix - có anyway tôi có thể dễ dàng thi đua môi trường đó trong khi biên dịch mã mẫu này? Có một IDE/trình biên dịch khác nhau thay đổi bất cứ điều gì?Sử dụng chức năng sys/socket.h trên windows

Nếu không, tôi tưởng tượng rằng tôi cần sử dụng môi trường Linux được ảo hóa, có thể tốt nhất là mã sẽ rất có thể đang chạy trong môi trường UNIX.

Cảm ơn.

Trả lời

29

Bạn có hai lựa chọn:

  1. Sử dụng Cygwin (thư viện mô phỏng Unix).
  2. Cổng đến Winsock (Thư viện chuẩn của Windows).

Tùy chọn đầu tiên cho phép bạn biên dịch các nguồn Unix của bạn hầu như không bị ảnh hưởng, nhưng liên kết bạn với thư viện mô phỏng Cygwin (có nghĩa là hai thứ trong thời gian chạy: hiệu suất chung - không chỉ mạng- có thể ít hơn tối ưu; môi trường đang chạy phải có sẵn Cygwin DLL). Lựa chọn thứ hai yêu cầu bạn thay thế sys/socket.h (thư viện ổ cắm BSD, chuẩn UNIX cho ngăn xếp TCP/IP) với winsock2.h và viết lại một số phần của mã - không nhiều, nhưng một số.

Một số câu hỏi có liên quan với thông tin có giá trị:

Differences between winsock and BSD socket implementations

Some Issues About Cygwin[Linux in Windows] (socket,thread,other programming and shell issues)

Examples for Winsock?

+1

+1 cho winsock và ví dụ. Tôi đã sử dụng winsock. Tôi chỉ cần thay đổi một phần nhỏ mã để chuyển chương trình Unix của mình sang Windows. Nó rất dễ dàng. – user172818

+1

Có nhiều bất ngờ hơn theo cách khác mặc dù :) Ví dụ, 'select' trên cửa sổ bỏ qua đối số đầu tiên, do đó, tự nhiên, các lập trình viên winsock đặt không ở đó cho' maxfd'. Hoàng gia đau :) –

0

Tôi nghĩ bạn đang tìm kiếm thư viện Winsock.

1

Viết ứng dụng nền tảng mạng chéo là không dễ dàng với những gì tiêu chuẩn BSD cung cấp cho bạn. Chắc chắn nó sẽ làm việc nhưng bạn sẽ phải thực hiện một số thay thế như thay thế ioctl (nếu cần) với ioctlsocket (trên cửa sổ). Sự khác biệt khác here.

Lời khuyên của tôi là sử dụng thư viện che giấu những khác biệt xấu xí này và cung cấp một cách giao tiếp thống nhất. Cá nhân tôi sử dụng ACE. Bạn có rất nhiều ví dụ cho bạn thấy cách tạo máy chủ và máy khách. Sao chép từ các mẫu và xem cách chúng thực hiện ở đó. Danh sách gửi thư của họ cũng rất hữu ích (đừng quên sử dụng PRF - xem cây nguồn cho Báo cáo vấn đề). Bạn có thể mượn sách để biết thêm thông tin. Lưu ý quan trọng: bằng cách sử dụng ace bạn có thể sử dụng các hàm bao bọc ACE như socket, setsockopt, ioctl vv mà không lo lắng rằng chúng sẽ không hoạt động. Thật không may điều này thêm một sự phụ thuộc thư viện mà không phải luôn luôn là một lựa chọn. Nhưng ACE có nhiều tính năng mạnh mẽ hơn mà tôi chắc chắn bạn sẽ thích khi bạn khám phá ra chúng. Gợi ý: Lò phản ứng, Proactor.

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