Cần giúp đỡ với UDP trong C++ Builder

Lê Khắc Tùng Sơn
(hypnohelmet)

New Member
Cần giúp đỡ về UDP trong C++ Builder

Chào mọi người!
Tớ đang cần send một struct qua UDP trong c++ builder mà không biết làm thế nào. Tớ dùng TUdpSocket, nó như thế này:

--------------------------------------------------------------------------

struct OUTDAT
{
long COUNT;
long CMD;
};

TUdpSocket* UdpSocket1;

/*-------------------------------------------------------------------*/

UdpSocket1->Active=true;

sockaddr_in target;

target.sin_family = AF_INET;
target.sin_addr.s_addr = inet_addr("145.85.158.82");
target.sin_port = htons(16385);
memset(& (target.sin_zero), '\0', 8);

OUTDAT* out = new OUTDAT;

int outa[20];

UdpSocket1->SendTo(out, sizeof(out), target, 0);

--------------------------------------------------------------------
Nếu tớ dùng outa thay cho out thì send được bình thường nhưng nếu dùng như trong đoạn code trên thì vô vọng. Thông cảm vì tớ chưa dùng C++ bao giờ :-s. Mọi người giúp một tay được không nhỉ? :) Cảm ơn nhiều!
 
Chỉnh sửa lần cuối:
Sao lại không edit được nhỉ? :-s Đành phải viết thêm cái message nữa vậy...
Đây là syntax của sendto:

int __fastcall SendTo(void *buf, int bufsize, const sockaddr_in &ToAddr, int flags = 0);
 
Đoạn code trên có vẻ ko có rì sai về cú pháp. Nếu sử dụng int outa[20] thì được mà sử dụng OUTDAT* lại ko được thì có lẽ là do SendTo trong quá trình xử lý nó gửi arrays đúng nhưng với struct nó gửi sai. Cụ thể là lỗi thế nèo?? Có nhận được data ở 145.85.158.82 ko?? Nhận được mà ko đúng hay là ko nhận được luôn?
 
Cảm ơn Hiếu ^^

Khi gửi cái int outa[20] và dùng PCATTCP track thì có thấy nhận được data trên IP kia, nhưng khi chuyển sang OUTDAT* out thì chịu chết, không thấy có biểu hiện gì cả. Có thể là vì OUTDAT* out chỉ là address thôi?? Chịu mấy cái khoản pointer mới address này :-s

Tiện đây cũng hỏi mọi người có ai biết có cái UDP monitor nào không, để xem nhận được packet gì ý mà ^^
 
Khi gửi cái int outa[20] và dùng PCATTCP track thì có thấy nhận được data trên IP kia, nhưng khi chuyển sang OUTDAT* out thì chịu chết, không thấy có biểu hiện gì cả. Có thể là vì OUTDAT* out chỉ là address thôi?? Chịu mấy cái khoản pointer mới address này
Chắc chắn là nó ko gửi mỗi cái địa chỉ. Gửi như thế thì cũng = thừa vì dù seo máy nhận cũng ko thể access memory của máy gửi được.
Tiện đây cũng hỏi mọi người có ai biết có cái UDP monitor nào không, để xem nhận được packet gì ý mà ^^
http://www.ethereal.com
 
Anh dùng VB tạo 1 đối tượng Winsock rồi cho chuyển sang UDP, bind vào cái port cần test --> vài dòng code là có 1 cái monitor :biggrin:
 
Thái Minh Hoàng Hà đã viết:
Anh dùng VB tạo 1 đối tượng Winsock rồi cho chuyển sang UDP, bind vào cái port cần test --> vài dòng code là có 1 cái monitor :biggrin:
Hehe, Hà giúp anh câu hỏi chính đi :D Hehehe..

Đặng Trần Hiếu đã viết:

Cái này powerful thế! Thanks Hiếu

Tớ vừa edit lại cái code thành:
----------------------------------------------------------------------
OUTDAT* out;
out = (struct OUTDAT*) malloc(sizeof(struct OUTDAT)+1);
----------------------------------------------------------------------
Cũng chưa thấy có triển vọng gì hết :D
 
Tớ vừa edit lại cái code thành:
----------------------------------------------------------------------
OUTDAT* out;
out = (struct OUTDAT*) malloc(sizeof(struct OUTDAT)+1);
----------------------------------------------------------------------
Cũng chưa thấy có triển vọng gì hết
Cái chính là nó vẫn nhận được ---> nó vẫn gửi. Chỉ có điều cái class đó nó xử lý thế nèo thui. Struct != Array.
 
0 phải dùng struct phải lằng nhằng pointer với cả address theo kiểu

OUTDAT out;
OUTDAT *pout = &out;

Rồi sùng pout thay cho out ah ?
 
Hì em lại ko dùng C++ mấy nên đành bó tay ko giúp gì được :D Nếu ko phải bắt buộc thì anh thử lấy luôn control Winsock dùng xem? Lần trước anh Phạm Quang Linh có gửi em 1 cái doc về Winsock nếu anh thấy hứng thú thì để em gửi lên cho? :D
 
Hehe, xin lỗi vì làm phiền mọi người.. Problem solved. This is how:
/*-------------------------------------------------------------*/

OUTDAT out;
UdpSocket1->sendto((char*)(&out), sizeof(OUTDAT), target, 0);

/*-------------------------------------------------------------*/

Thanks! ^^
 
Back
Bên trên