Tks thầy ạ.
Em đã đập hẳn code cũ đi, h đang viết lại, hy vọng chữa được hết những bệnh của cái code cũ.
Hix, nhà bị cắt mạng, 24h mới onl đc 1 lần.
Thông báo
Collapse
No announcement yet.
Giao thức TCP/IP và Web server với AVR
Collapse
This is a sticky topic.
X
X
-
Trả lời luôn được ko:
Đặt đoạn code trong 2 cái tag \[CODE\] và \[/CODE\]. (Bỏ dấu \ đi nhé)
Hiện tượng chạy mỗi lần ra mỗi kết quả thì coi lại cách khởi tạo giá trị các biến (biến input), có thể do không xóa hết giá trị cũ của vùng nhớ khi khởi tạo biến.
Leave a comment:
-
Anh ơi, anh xem giúp em code MD5 được không ạ? Triệu chứng của nó là chạy trên các máy khác nhau cho ra kết quả khác nhau và chạy trên cùng 1 máy cũng cho 2 kết quả khác nhau @@
Em cảm ơn anh nhiều nhiềuCode:#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #define sbit(byte,bit) byte |= 1<<bit #define cbit(byte,bit) byte &= ~(1<bit) //Mang chua cac hang so se duoc xu ly trong 1 tac vu unsigned long k[64]; //Khoi tao chuoi unsigned long h0 = 0x67452301; unsigned long h1 = 0xEFCDAB89; unsigned long h2 = 0x98BADCFE; unsigned long h3 = 0x10325476; //Xac dinh cac gia tri dich chuyen cua moi tac vu unsigned long r[64] = {7,12,17,22, 7,12,17,22, 7,12,17,22, 7,12,17,22, 5,9,14,20, 5,9,14,20, 5,9,14,20, 5,9,14,20, 4,11,16,23, 4,11,16,23, 4,11,16,23, 4,11,16,23, 6,10,15,21, 6,10,15,21, 6,10,15,21, 6,10,15,21}; void md5(unsigned long input[]) { unsigned long *w; unsigned long f, g; //------------------------------------------------------------------------- //------------------------------------------------------------------------- //-----------------------BAT DAU VOOC CHUOI-------------------------------- //Bat dau vong lap unsigned int n = 0, i = 0; while(n < 8) { w = &input[n]; //Khoi tao bien unsigned long a = h0; unsigned long b = h1; unsigned long c = h2; unsigned long d = h3; unsigned long temp; for(i = 0; i < 64; i++) { if(0 <= i <= 15) { f = (b & c) || ((~b) & d); g = i; } else if(16 <= i <= 31) { f = (d & b) || ((~d) & c); g = (5*i + 1) % 16; } else if(32 <= i <= 47) { f = b ^ c ^ d; g = (3*i + 5) & 16; } else if(48 <= i <= 63) { f = c ^ (b || (~d)); g = (7*i) & 16; } temp = d; d = c; c = b; b += (a + f + k[i] + w[g])<<r[i]; a = temp; } n += 8; h0 += a; h1 += b; h2 += c; h3 += d; } w = &input[0]; w[0] = h0; w[1] = h1; w[2] = h2; w[3] = h3; printf("\n Ket qua hash = %x%x%x%x", h3, h2, h1, h0); } int main() { unsigned char input[129] = {""}; //Tien xu ly unsigned int i = 0, n = 0; int j = 0; unsigned int bit_length = 8*strlen(input); unsigned int len = strlen(input); n = len + 1; sbit(input[len],7); if((bit_length % 512) < 448) { i = 448 - bit_length - 8; while(i) { j = 7; while(j >= 0) { cbit(input[n],j); j--; i--; } n++; } input[62] = bit_length / 256; input[63] = bit_length % 256; } else { n++; while(n < 120) input[n++] = 0; input[126] = bit_length / 256; input[127] = bit_length % 256; } //Khoi tao mang hang so for(i = 0; i < 64; i++) k[i] = abs(pow(2,32)*sin(i+1)); //printf("\n Nhap chuoi dau vao:\n"); //getc(input); md5((unsigned long)input); getch(); return 0; }
Ủa, mà sao post đựoc code trong khung như thầy Tâm vậy anh?
Last edited by dhp11591; 30-08-2012, 16:21.
Leave a comment:
-
Chào Thầy,
Em đang làm project về TCP/IP trên arm cortex m3 stm32f107, không biết Thầy có làm qua chưa? có nhìu ví dụ mẫu vễ webserver on chip quá, nhưng ko có ví dụ nào về webserver chạy trên PC hết, nên em gặp rất nhìu khó khăn ( nhìu lắm, ko biết phải hỏi sao luôn đó Thầy)... ko biết thầy có tài liệu gì không, cho em tham khảo với.
Cảm ơn Thầy.
Leave a comment:
-
Little Endian:Nguyên văn bởi dhp11591 Xem bài viếtHi, tự nhiên làm phiền thầy mà còn chưa bấm thanks nữa chứ, tại em ham hỏi quá nên quên mất, xin thầy lượng thứ.
Mặt dày hỏi thầy câu nữa
"64-bits little-endian word" có nghĩa là từ 64 bit có trọng LSB ở cuối phải không ạ?
Base Address+0 Byte0
Base Address+1 Byte1
Base Address+2 Byte2
Base Address+3 Byte3
Big Endian:
Base Address+0 Byte3
Base Address+1 Byte2
Base Address+2 Byte1
Base Address+3 Byte0
Leave a comment:
-
Call-ID là gì cũng được, miễn là duy nhất.Nguyên văn bởi dhp11591 Xem bài viếtEm cám ơn thầy nhiều lắm lắm
Sau khi thầy thầy giải thích, em đã hiểu về branch, tag, Call-ID.
Em đã thử bắt gói khi 1 account đăng nhập và khi 2 máy gọi cho nhau, nó vẫn yêu cầu branch và tag nên khi em cắm mạch vào, mạch gửi 1 request REGISTER đến Proxy Sever nhưng sever không thèm gửi lại 1 respond 401 Unauthorized đòi mật khẩu ạ
Vậy UA generate branh, tag, Call-ID bằng giải thuật nào, đầu vào nó là gì ạ? Nó có liên quan đến MD5 không ạ? Em thấy nó cũng lằng nhằng như mấy chuỗi ký tự mã hóa username-password trong bản tin REGISTER thứ 2
Branch: cũng không được trùng và bắt đầu bằng "z9hG4bK". Tham khảo thêm http://www.ietf.org/rfc/rfc3261.txt mục 8.1.1.7
Tag: trường From bắt buộc có Tag, trường To của mesage không nằm trong 1 dialog không được có Tag, nhìn chung, khi em gửi đi bản tin REGISTER không cần Tag trong trường To. Cách sinh ra Tag tự người lập trình quyết định.
Tham khảo thêm http://www.ietf.org/rfc/rfc3261.txt để biết, hơi khó hiểu nhưng đây là khuyến nghị chính thức, mọi hệ thống đều theo RFC này.
May mà hồi trước dạy VoIP nên mới trả lời được các vấn đề của em.Last edited by nttam79; 28-08-2012, 21:56.
Leave a comment:
-
Em cám ơn thầy nhiều lắm lắm
Sau khi thầy thầy giải thích, em đã hiểu về branch, tag, Call-ID.
Em đã thử bắt gói khi 1 account đăng nhập và khi 2 máy gọi cho nhau, nó vẫn yêu cầu branch và tag nên khi em cắm mạch vào, mạch gửi 1 request REGISTER đến Proxy Sever nhưng sever không thèm gửi lại 1 respond 401 Unauthorized đòi mật khẩu ạ
Vậy UA generate branh, tag, Call-ID bằng giải thuật nào, đầu vào nó là gì ạ? Nó có liên quan đến MD5 không ạ? Em thấy nó cũng lằng nhằng như mấy chuỗi ký tự mã hóa username-password trong bản tin REGISTER thứ 2
Leave a comment:
-
Là \r\nNguyên văn bởi dhp11591 Xem bài viếtDạ UA ạ. Em định cho nó cantact với 1 cái SIP sever cài trên 1 máy trong LAN
Ký tự xuống dòng, nó là "\r\n" hay "\n\r" ạ? Em thấy nó đều là xuống dòng và về đầu dòng.
Trong bản tin SIP, em thấy trong 1 số trường có tag và branch, ý nghĩa của nó là gì ạ? Các con số đó tính như thế nào, có quan trọng không ạ?
Hix, em dùng wireshark thì thấy có những bản tin > 700 byte (có tag và branch) mà nhận hay gửi chúng thì phải chia ra, em sợ chia ra rồi server nhận đc lại không biết ghép lại, vì 1 mình 1 chuẩn. Mắc quá thầy ơi...
Branch nằm trong trường VIA dùng để phân biệt các transaction. Một transaction là bao gồm bản tin request và các bản tin response cho nó.
Ví dụ khi UA gửi 1 bản tin INVITE, nó sẽ nhận được nhiều bản tin response cho bản tin INVITE đó từ các Proxy server/ Redirect Server trước khi nhận được bản tin từ UA mà nó muốn gọi. Như vậy bản tin INVITE trên và tất cả các bản tin response cho nó đều có chung Branch.
Tag nằm ở trường From và To, nhìn chung, From Tag, To Tag và Call-ID dùng để phân biệt các Dialog SIP. Một Dialog có thể hiểu là 1 cuộc trao đổi giữa 2 thành phần trong mạng. Ví dụ trong một cuộc gọi SIP giữa 2 UA thì bản tin INVITE và responses của nó là 1 transaction, bản tin BYE và responses cho nó cũng là 1 transaction, nhưng cả 2 transaction thuộc cùng 1 Dialog.
Tuy nhiên cách dùng Tag thì rắc rối hơn, ví dụ UA gửi đi 1 bản tin INVITE, các porxy trên mạng đều response cho nó, trong trường hợp này Tag của trường To trong mỗi response lại khác nhau.
Tag trong From sinh ra bởi Caller. Trong khi Tag trong To sinh ra bởi Callee
Nếu mô hình mạng đơn giản thì không cần Tag và Branch cũng được.
SIP message được gửi bằng UDP. Do đó một bản tin SIP nên nằm trong 1 gói UDP độc lập. Em có thể mở rộng buffer nếu kích thước bản tin lớn.
Leave a comment:
-
Dạ UA ạ. Em định cho nó cantact với 1 cái SIP sever cài trên 1 máy trong LAN
Ký tự xuống dòng, nó là "\r\n" hay "\n\r" ạ? Em thấy nó đều là xuống dòng và về đầu dòng.
Trong bản tin SIP, em thấy trong 1 số trường có tag và branch, ý nghĩa của nó là gì ạ? Các con số đó tính như thế nào, có quan trọng không ạ?
Hix, em dùng wireshark thì thấy có những bản tin > 700 byte (có tag và branch) mà nhận hay gửi chúng thì phải chia ra, em sợ chia ra rồi server nhận đc lại không biết ghép lại, vì 1 mình 1 chuẩn. Mắc quá thầy ơi...
Leave a comment:
-
Ừ, bản tin SIP gần giống HTTP, header kết thúc bằng \n\r\n\r.Nguyên văn bởi dhp11591 Xem bài viếtEm cảm ơn thầy ạ.
Em cũng vừa viết lại theo cách đó. Em đang viết SIP, viêt 9 lần rồi mà chưa thành công hẳn hoi.
Mà em cũng chưa hiểu, nếu lưu data vào PROGMEM thì làm sao cập nhật được ạ? Ý em là khi khai báo 1 mảng (1 vùng nhớ) cho 1 bộ đệm lưu những thứ cần thiết, thì phải khởi tạo luôn cho nó. Mà đã khởi tạo rồi thì không cập nhật được ạ. Em dịch, nó cứ báo lỗi read-only
Cuối cùng, em đành ngậm ngùi lưu qua EEPROM, chấp nhận cái giới hạn 100.000 lần ghi/xóa của nó để có cái đề mô
Vậy là đến giai đoạn bật wireshark bắt gói nghiền ngẫm như chuyên gia, có điều em nghiền 1 hồi mà vẫn chưa ngẫm ra tại sao bản tin của em lại có chỗ bị bôi vàng chóe????
Có phải do trong các URL, em viết thừa port 5060 của nó không ạ? Nhũng chỗ nào nên viết, nhưng chỗ nào không đựoc viết, xin thầy chỉ bảo cho em.
Hix, nếu post của em làm loãng 2pic, xin thầy và các anh thông cảm. Xin MOD đừng động đến
//-----------------------------------------
//Hóa ra header của SIP cũng kết thúc bằng 1 dòng trống, em không có cái đấy, wireshark nó chỉ cho mà lúc nãy không chịu đọc
Mà em dùng ATmega đóng vai trò gì trong SIP vậy? UA hay proxy/register server, hay chỉ để test các bản tin SIP.
Leave a comment:
-
Em cảm ơn thầy ạ.
Em cũng vừa viết lại theo cách đó. Em đang viết SIP, viêt 9 lần rồi mà chưa thành công hẳn hoi.
Mà em cũng chưa hiểu, nếu lưu data vào PROGMEM thì làm sao cập nhật được ạ? Ý em là khi khai báo 1 mảng (1 vùng nhớ) cho 1 bộ đệm lưu những thứ cần thiết, thì phải khởi tạo luôn cho nó. Mà đã khởi tạo rồi thì không cập nhật được ạ. Em dịch, nó cứ báo lỗi read-only
Cuối cùng, em đành ngậm ngùi lưu qua EEPROM, chấp nhận cái giới hạn 100.000 lần ghi/xóa của nó để có cái đề mô
Vậy là đến giai đoạn bật wireshark bắt gói nghiền ngẫm như chuyên gia, có điều em nghiền 1 hồi mà vẫn chưa ngẫm ra tại sao bản tin của em lại có chỗ bị bôi vàng chóe????
Có phải do trong các URL, em viết thừa port 5060 của nó không ạ? Nhũng chỗ nào nên viết, nhưng chỗ nào không đựoc viết, xin thầy chỉ bảo cho em.
Hix, nếu post của em làm loãng 2pic, xin thầy và các anh thông cảm. Xin MOD đừng động đến
//-----------------------------------------
//Hóa ra header của SIP cũng kết thúc bằng 1 dòng trống, em không có cái đấy, wireshark nó chỉ cho mà lúc nãy không chịu đọc
Last edited by dhp11591; 24-08-2012, 18:25.
Leave a comment:
-
Không nên viết nháp gì cả: khi nhận bản tin đến trong buffer, em xử lý và lưu lại các giá trị cần thiết xong -> bản tin trả lời ghi dè lên luôn trên buffer.Nguyên văn bởi dhp11591 Xem bài viếtThầy ơi, có chỗ này em không hiểu, xin thầy giải đáp cho em:
Em đang viết 1 giao thức chạy qua UDP, em thấy có 1 vấn đề là khi nhận được 1 bản tin và phải đáp ứng lại 1 bản tin thì bản tin nhận đc đang nằm trên buffer và bản tin đáp ứng phải đc viết nháp ở 1 vùng nhớ khác rồi copy về vùng nhớ bắt đầu bởi ethGetBuffer() + ETH_HEADER_LEN + IP_HEADER_LEN + 8. Mà RAM của ATmega32 khá nhỏ => phải viết trên ROM, nhưng ROM là bộ nhớ chỉ đọc, vậy viết nháp nó như thế nào ạ?
Mà sao em vẫn dùng hàm strcat() với chuỗi prog_char mà không báo lỗi ạ?
Xin thầy giúp em với.
Em cám ơn thầy ạ.
Leave a comment:
-
1-Chỗ này dường như tôi sai: phải là headerLen = (rqst->body) - (rqst->header) - 4;Nguyên văn bởi dhp11591 Xem bài viếtCác anh ơi, cho em hỏi vài điều:
1) Trong hàm httpHeaderGetField(), thầy Tâm tính headerLen = (rqst->header) - (rqst->body) - 4;
Em nghĩ kết quả của nó là số âm. Vậy sao vẫn dùng được ạ?
2) Biến lưu trong Program Memory (kiểu prog_char) thì dùng hàm nào để thay đổi giá trị của nó ạ? Em đọc thư viện pgmspace.h với user_manual mà không thấy nói gì đến. Liệu nó có thể thay đổi đựoc không ạ? Hay là thay đổi nó hoàn toàn giống với biến trong SRAM? Em dùng ATmega32.
Xin các anh chỉ giáo. Tks
Vẫn được vì headerLen khai báo là unsigned và chỉ dùng để giới hạn số byte tìm kiếm, chỉ có là phải tìm lâu hơn thôi.
2-Biến lưu trong Program Memory về nguyên tắc là không thay đổi được (thực ra trong AVR vẫn có thể dùng lệnh ghi flash để thay đổi nó). Nếu đã muốn thay đổi thì không nên khai báo thuộc Program Memory.
Leave a comment:
Bài viết mới nhất
Collapse
-
bởi chinhnguyen9So sánh sóng 2 mạch nguồn Push-pull
· Sóng vuông giửa 2 cực D của mạch Pushpull trong module inverter 24-220V sine giả của TQ. Mạh điện này khá đặc biêt ở chổ, không thấy mạch snubber mà hiêu quả triêt sóng hài quá tốt dù hoạt...-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 14:27 -
-
bởi chinhnguyen9Mạch điên bếp tù gộm 2 khối:
Khối điêu khiển:
-Thiết lập công suất nấu
-Thiết lập thời gian nấu
-Kiểm tra có đặt nồi hay không, đúng loại hay không?
-Có quá nhiệt không?
Khối công suất:
- Nắn+ lọc điên AC ra 310VDC +loọc nhiểu...-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 14:05 -
-
bởi ittcHi các bác, sau khi được vài lời khuyên thì em có vào lướt web để xem vài mẫu máy, thì ở phần thông số kỹ thuật của máy, thấy họ để vài thông số sau thì em không rành lắm, nhờ các bác giải thích hộ em được không, cụ thể như hình...
-
Channel: Điện tử gia dụng
Hôm qua, 18:34 -
-
bởi Nexus 6PCác bác cho e xin mạch chớp xinhan 4 bóng hazard kiểu luân phiên với
giống clip này mà kiểu nháy ở giây thứ 2, e cảm ơn ạCode:https://www.tiktok.com/@caitiemdocar/video/7586617548284628242
-
Channel: Điện tử công suất
14-03-2026, 17:26 -
-
bởi ittcNhờ các bác chỉ bảo, tư vấn giúp em nên mua loại máy khoan cầm tay nào dùng trong nhu cầu gia đình với ạ, em vào website của 1 số nới bán uy tín thì mục Máy khoan họ để nhiều loại quá, em chả biết là nên mua loại nào cho đúng, hoa cả mắt...
-
Channel: Điện tử gia dụng
13-03-2026, 17:59 -
-
bởi chinhnguyen9Sóng vuông trên cực D của 1 nhánh mạch Push pull (board mạch UPS Santak 1000)
Kết quả khi chạy không có hồi tiếp âm ghim điện áp ra thì khi không tải điện áp có thể >400VDC do sóng hài tạo ra.
Sóng vuông giữa 2 cực D của mạch Push pull trong module...-
Channel: Hướng dẫn sử dụng diễn đàn
10-03-2026, 02:54 -
-
bởi ittcDo đang vội nên tính làm dần, nhờ các bác tư vấn giúp em về việc lắp camera quan sát ở nhà với, nhà em thì cũng kiểu nhà phố, nhà mặt tiền đường ngõ hẻm thôi.
- Thứ nhất là em tính sẽ lắp đặt loại camera đi dây và có đầu...-
Channel: Tâm tình dân kỹ thuật
09-03-2026, 06:18 -
-
bởi s2pk98Ai có sơ đồ nguồn tcl l49p3- cf cho em với ,cháy mấy con r mà không biết là mấy...
-
Channel: Điện tử gia dụng
08-03-2026, 21:38 -

Leave a comment: