Em đã thử viết một chương trình socket client đơn giản, sử dụng port 23 (telnet), gặp mấy vấn đề sau:
- Khi kết nối thành công, server sẽ trả về một đoạn thông báo yêu cầu LOGIN. Nhưng khi chạy chương trình, nếu read buffer ngay sau khi kết nối, sẽ nhận được một khoảng trắng hoặc k*ý tự đặc biệt. Tạm ngừng để đợi bằng lệnh Sleep trước khi lấy thông tin thì ok, nhận được đúng thông báo, nhưng Sleep(1) là 1/1000 giây mà chương trình lag hẳn, độ trễ có lẽ phải ~1 giây, thua xa chương trình telnet cài trên terminal (hay cmd của windows)
- Nhập lệnh một cách thủ công, không có vấn đề gì
Code:
void sendcmd(int sockfd)
{
int n;
char sendbuff[256];
memset(sendbuff, 0, 256);
fgets(sendbuff,255,stdin);
n = write(sockfd,sendbuff,strlen(sendbuff));
if (n<0)
error("ERROR reading from socket");
}
- Sửa lại để "tự động hóa":
Code:
void sendcmd(int sockfd, char sendbuff[256])
{
int n;
n = write(sockfd,sendbuff,strlen(sendbuff));
if (n<0)
error("ERROR reading from socket");
}
sendcmd(sockfd,"comtech"); // login
sendcmd(sockfd,"comtech"); // password
sendcmd(sockfd,"<0/TFQ?"); // hỏi tham số TFQ bằng bao nhiêu
Tự động đăng nhập theo các bước:
- Khởi tạo socket
- Kết nối
- In ra dòng thông báo kết nối thành công, yêu cầu đăng nhập (cái này là trả về từ server)
- Gửi login
- Nhận, in ra thông báo trả về
- Gửi password
- Nhận, in ra thông báo trả về, được "comtechcomtech"
Thay vì như sau (nhập lệnh thủ công)

Em nghĩ có vấn đề gì đó trong xử lý string.