Я написал программу сокета C. В моей серверной программе я включил функцию *data_process()*.
мой вопрос
Программа-сервер получает IP-адрес клиента и записывает его в файл *info_agent_report.txt*.
Мне нужно использовать этот IP-адрес в программе *data_process()* (которая включена в серверную программу*), которая создает файл *task_agent_report.csv*.
Могу ли я использовать его? (я использовал, но не отображает IP-адрес в файле *task_agent_report.csv*!!)
Может ли кто-нибудь помочь мне.
Моя программа server и data_process() выглядит следующим образом
int main()
{
//intialization
//....
struct sockaddr_in client_address;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) > 0)
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(9734);
server_len = sizeof(address);
bind(sockfd, (struct sockaddr *) &address, server_len);
listen(sockfd, 5);
while (1)
{
char ch;
client_len = sizeof(client_address);
new_sockfd = accept(sockfd, (struct sockaddr *) &client_address,
&client_len);
if (new_sockfd == -1)
{
perror("Connection Not Accepted!!");
return (1);
}
else
{
printf("..");
//to dispaly ip address
FILE* ta_address = fopen("info_agent_report.txt", "a+");
fprintf(ta_address, "%s,", inet_ntoa(client_address.sin_addr));
fclose(ta_address);
log = open("info_agent_report.txt", O_CREAT | O_RDWR | O_APPEND, 0777);
if (log == -1)
{
perror("cannot open info_agent_report file\n");
return (1);
}
do
{
x1 = read(new_sockfd, buffer1, 1024);
x2 = write(log, buffer1, x1);
} while (x1 > 0);
close(log);
close(new_sockfd);
}
data_process();
}
}
//i need to use the ip address in this function
программа data_process:
void ProcessPacket(unsigned char* , int);
void print_ip_header(unsigned char*, int);
void print_tcp_packet(unsigned char *, int);
void print_udp_packet(unsigned char *, int);
void print_icmp_packet(unsigned char*, int);
void PrintData(unsigned char*, int);
FILE *logfile;
int data_process()
{
//intialising...
unsigned char *buffer3 = (unsigned char *) malloc(1024);
//i tried to print the ip address on the terminal but it din't
struct sockaddr_in client_address;
printf("print on the terminal from info agent%s\n",
inet_ntoa(client_address.sin_addr));
infile = open("info_agent_report.txt", O_RDONLY);
if (infile == -1)
{
perror("cannot open info_agent_report file\n");
return (1);
}
logfile = fopen("task_agent_processed.csv", "w+");
if (logfile == NULL)
{
printf("Unable to create task_agent_processed file.");
}
do
{
data_size = read(infile, buffer3, 1024);
print_tcp_packet(buffer3, data_size);
} while (data_size > 0);
fclose(logfile);
close(infile);
return 0;
}
void print_tcp_packet(unsigned char* Buffer, int Size)
{
//initialization,structure....
//i need to use the ip address in the csv file to display it in the same row
fprintf(logfile, "%s,%d,%u\n", inet_ntoa(client_address.sin_addr), 1,
ntohs(tcph->source));
}