PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > MiWi, Zigbee, Ethernet

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

MiWi, Zigbee, Ethernet ZigBee có khả năng kết nối tới 65000 node, MiWi dành riêng cho Microchip chỉ kết nối được 1000 node, nhưng điều gì đang diễn ra...?

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 08-08-2011, 01:03 PM   #3
honghoan
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 11
:
Trích:
Nguyên văn bởi tanbka View Post
Cái này là do khi mở Socket, bạn phải khai báo địa chỉ đích,ở đây bạn mở 2 socket để kết nỗi với 2 thiết bị khác nhau &ServerNamePC và &ServerName. Trong địa chỉ đích, không những có địa chỉ IP mà còn phải có cả địa chỉ MAC nữa.
Nếu không khai báo địa chỉ MAC thì PIC sẽ lấy địa chỉ MAC mà nó thu được khi quá trình kết nối thành công với 1 PC bên ngoài. Vì thế bạn sẽ chỉ kết nối được với 1 PC bên ngoài.
Bạn dùng lệnh này để lấy địa chỉ MAC của PC tương ứng với địa chỉ IP của nó nhé
ARPResolve(&server_info.IPAddr); lệnh này để gửi yêu cầu trả về địa chỉ MAC
Sau khoảng 1s kiểm tra điều kiện
if(ARPIsResolved(&server_info.IPAddr, &server_info.MACAddr)); nếu điều kiện đúng, tức là ta đã có địa chỉ MAC.
Khi đó bạn mở Socket thì đã có thông tin chính xác của địa chỉ đích tới, thông tin dữ liệu hoàn toàn do mình điều khiển.
Chúc bạn thành công.
Mình đã nghiên cứu lại cái ARP và tiến hành thử như cách của bạn nói và thử nhiều cách khác với cái ARP nữa nhưng vẫn không thành công. Vẫn bị như lúc không sử dụng các hàm ARP. Các hàm ARP hầu như không gây ảnh hưởng gì? Có cách nào khác hay mình có làm sai chỗ nào không tanbka?
Code:

ARPResolve(&Server_info.IPAddr);
//DelayMs(1000);
if(ARPIsResolved(&Server_info.IPAddr,&Server_info. MACAddr))
{
MySocket = TCPOpen(Server_info.IPAddr.Val,TCP_OPEN_RAM_HOST,S erverPort,TCP_PURPOSE_GENERIC_TCP_CLIENT);
}

Mình có xem lại TCPIP Stack help thì hàm TCPOpen() đã làm luôn công việc hỏi địa chỉ MAC luôn, dùng hàm ARP là không cần thiết khi sử dụng các hàm TCPOpen() và UDPOpen().
Đuối quá, xin nói rõ hơn chút nữa là mình dùng cái App: GenericTCPClient.c;
+ Mình đã làm với cách là: mở Socket1=>truyền data=>đóng Socket1 =>mở Socket2=>truyền data=> đóng Socket2. Truyền nhận bình thường.
+ Nhưng mở Socket1=>mở Socket2 thì bị treo => tắt Server của Socket1 thì Socket2 truyền nhận bình thường =>mở lại Server Socket1 => Socket2 treo trở lại.
Có bạn nào hay anh chị nào đã làm với 2 Socket chạy song song như em xin chỉ bảo giúp với. Cảm ơn rất rất nhiều !!

thay đổi nội dung bởi: honghoan, 08-08-2011 lúc 03:23 PM.
honghoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:39 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam