0
我已經寫了程序讀取客戶端的簡單文本。 當telnet發送消息時,該程序運行良好,但在ftp發送消息時該程序不起作用。 此外,程序誤解(?)套接字連接良好。 (見圖) 事實上,ftp客戶端試圖連接我的服務器,並且隨着時間的推移,ftp客戶端連接失敗。我想用我的服務器程序讀取ftp消息。我該怎麼辦??我想讀取FTP命令
服務器程序 -
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define MAXLINE 1024
#define PORTNUM 3600
void * thread_func(void *data)
{
int sockfd = *((int *)data);
int readn;
socklen_t addrlen;
char buf[MAXLINE];
struct sockaddr_in client_addr;
memset(buf, 0x00, MAXLINE);
addrlen = sizeof(client_addr);
getpeername(sockfd, (struct sockaddr *)&client_addr, &addrlen);
while((readn = read(sockfd, buf, MAXLINE)) > 0)
{
printf("Read Data %s(%d) : %s", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buf);
memset(buf, 0x00, MAXLINE);
}
close(sockfd);
printf("worker thread end\n");
return 0;
}
int main(int argc, char** argv)
{
int listen_fd, client_fd;
socklen_t addrlen;
int readn;
char buf[MAXLINE];
pthread_t thread_id;
struct sockaddr_in server_addr, client_addr;
if((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
return 1;
memset((void*)&server_addr, 0x00, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORTNUM);
if(bind(listen_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
perror("bind error");
return 1;
}
if(listen(listen_fd, 5) == -1)
{
perror("listen error");
return 1;
}
while(1)
{
addrlen = sizeof(client_addr);
client_fd = accept(listen_fd, (struct sockaddr *)&client_addr, &addrlen);
if(client_fd == -1)
{
printf("accept error\n");
// return -1;
}
else
{
printf("someone comes in.\n");
fflush(stdout);
pthread_create(&thread_id, NULL, thread_func, (void *)&client_fd);
pthread_detach(thread_id);
}
}
return 0;
}
這裏是數字。 https://docs.google.com/document/d/1sKmk0NfTA9dL2svOPsAtaXt_bSpcT4s62yjHuKZCpIk/edit
消息「220 - #\ r \ n我的FTP服務器\ r \ n」被打印到我的終端。但我想收到一條消息,ftp-client發送。 T.T你能詳細告訴我多個案例嗎?網站等。 – inherithandle
哇,我明白了。我所要做的就是發送與標準ftp服務器發送給FTP客戶端相同的代碼消息。 – inherithandle
字符串更新...我測試了它,它工作...它將客戶端移動到「用戶」階段 –