Vấn đề về socket programming
Em vừa học sơ qua về lập trình socket trong c++, cụ thể là lập trình socket bằng MFC của VS
Khi muốn kết nối với server và địa chỉ là localhost thì code có dạng :
Client.Connect(_T(“127.0.0.1”),port tu chon);
Vấn đề của em là khi thay “127.0.0.1” bằng một chuỗi, ví dụ _T(ipnhapvao) (ipnhapvao là ip mình yêu cầu nhập vào khi khởi động client ) thì lại báo lỗi.
Theo em tổng hợp từ google thì macro _T() không thể nhận một biến, có cao nhân nào chỉ em cách khắc phục được không ạ ?
TL;DR: bỏ macro
_T
đi là xong,_T
chỉ đi chung với chuỗi thô (ý mình là chuỗi trong ngoặc kép, không phải biến). Lưu ý, biến chuỗi phải có dạng LPCTSTR/LPTSTR (nếu không xài UNICODE thì dùng char* cũng đủ rồi).Đúng rồi, method
Connect
có prototype như sau:BOOL Connect(LPCTSTR lpszHostAddress, UINT nHostPort);
vớiLPCTSTR
là __L__ong __P__ointer __C__onst __T__char __STR__ing. Trong đó, TCHAR nó phụ thuộc vào project bạn có sử dụng UNICODE hay không thôi và macro_T
để tương thích chuỗi theo ANSII hay UNICODE.Macro
_T
đơn giản là thêm tiền tốL
trước chuỗi nếu đã định nghĩa UNICODE, còn không thì không làm gì cảNếu bạn không làm việc với UNICODE thì không cần phải phức tạp, bỏ
_T
đi, thay vào đó là biến.Đọc bài của bác em cũng vỡ ra nhiều điều , em đã thử tạo một biến chuỗi char và khi truyền đối số cho hàm connect thì ép thêm kiểu (LPCTSTR) và đã thành công.
Cảm ơn sự nhiệt tình của bác
Nếu bạn nào có vấn đề tương tự thì có thể bấm Alt + F7 để mở properties , Configuration Properties > General. Switch Character Set to “Use Multi-Byte Character Set”. Sau đó sẽ sử dụng biến chuỗi bình thường, không cần ép kiểu hay sử dụng macro _T.