void loop() { while(1) { bzero(writebuf,MAXDATESIZE); printf("客户端:"); scanf("%s",writebuf); len = strlen(writebuf); writebuf[len] = '\0'; if(strcmp(writebuf,"/add",4) == 0) { symbol = 2; bzero(writebuf,MAXDATESIZE); } else if(strcmp(writebuf,"/chat",5) == 0) { symbol = 3; bzero(writebuf,MAXDATESIZE); } else if((strcmp(writebuf,"Y") == 0) || (strcmp(writebuf,"y") == 0)) { symbol = 4; printf("Start chat:"); bzero(writebuf,MAXDATESIZE); } else if(strcmp(writebuf,"/groupchat",10) == 0) { symbol = 5; printf("Start groupchat:"); bzero(writebuf,MAXDATESIZE); } switch(symbol) { case 2: { addfriend(); break; } case 3: { sendchat(); break; } case 4: { startchat(); break; } case 5: { groupchat(); break; } } } }
int main(int argc, char *argv[]) { log_init(); srand(time(NULL)); int randdomnum = rand(); memcpy(self_client_id, &randdomnum, 4); //memcpy(self_client_id, "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", 32); if (argc < 4) { printf("usage %s ip port client_id(of friend to find ip_port of)\n", argv[0]); exit(0); } addfriend(argv[3]); //initialize networking //bind to ip 0.0.0.0:PORT IP ip; ip.i = 0; if (init_networking(ip, PORT) == -1) { return 1; } perror("Initialization"); IP_Port bootstrap_ip_port; bootstrap_ip_port.port = htons(atoi(argv[2])); //bootstrap_ip_port.ip.c[0] = 127; //bootstrap_ip_port.ip.c[1] = 0; //bootstrap_ip_port.ip.c[2] = 0; //bootstrap_ip_port.ip.c[3] = 1; bootstrap_ip_port.ip.i = inet_addr(argv[1]); bootstrap(bootstrap_ip_port); IP_Port ip_port; char data[MAX_UDP_PACKET_SIZE]; uint32_t length; uint32_t i; while(1) { doDHT(); while(recievepacket(&ip_port, data, &length) != -1) { if(DHT_handlepacket(data, length, ip_port)) { printf("UNHANDLED PACKET RECEIVED\nLENGTH:%u\nCONTENTS:\n", length); printf("--------------------BEGIN-----------------------------\n"); for(i = 0; i < length; i++) { if(data[i] < 16) printf("0"); printf("%hhX",data[i]); } printf("\n--------------------END-----------------------------\n\n\n"); } else { printf("Received handled packet with length: %u\n", length); } } print_clientlist(); print_friendlist(); c_sleep(300); } exit_networking(); log_exit(); return 0; }
int main(int argc, char *argv[]) { //memcpy(self_client_id, "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", 32); if (argc < 6) { printf("usage %s ip port client_id(of friend to find ip_port of) filename(of file to send) client_id(ours)\n", argv[0]); exit(0); } addfriend(argv[3]); IP_Port friend_ip; int connection = -1; int inconnection = -1; //initialize networking //bind to ip 0.0.0.0:PORT IP ip; ip.i = 0; init_networking(ip, PORT); memcpy(self_client_id, argv[5], 32); perror("Initialization"); IP_Port bootstrap_ip_port; bootstrap_ip_port.port = htons(atoi(argv[2])); bootstrap_ip_port.ip.i = inet_addr(argv[1]); bootstrap(bootstrap_ip_port); IP_Port ip_port; char data[MAX_UDP_PACKET_SIZE]; uint32_t length; char buffer1[128]; int read1 = 0; char buffer2[128]; int read2 = 0; FILE *file1 = fopen(argv[4], "rb"); if ( file1==NULL ){printf("Error opening file.\n");return 1;} FILE *file2 = fopen("received.txt", "wb"); if ( file2==NULL ){return 1;} read1 = fread(buffer1, 1, 128, file1); while(1) { while(recievepacket(&ip_port, data, &length) != -1) { if(rand() % 3 != 1)//simulate packet loss { if(DHT_handlepacket(data, length, ip_port) && LosslessUDP_handlepacket(data, length, ip_port)) { //if packet is not recognized printf("Received unhandled packet with length: %u\n", length); } else { printf("Received handled packet with length: %u\n", length); } } } friend_ip = getfriendip(argv[3]); if(friend_ip.ip.i != 0) { if(connection == -1) { printf("Started connecting to friend:"); printip(friend_ip); connection = new_connection(friend_ip); } } if(inconnection == -1) { inconnection = incoming_connection(); if(inconnection != -1) { printf("Someone connected to us:"); printip(connection_ip(inconnection)); } } //if someone connected to us write what he sends to a file //also send him our file. if(inconnection != -1) { if(write_packet(inconnection, buffer1, read1)) { printf("Wrote data.\n"); read1 = fread(buffer1, 1, 128, file1); } read2 = read_packet(inconnection, buffer2); if(read2 != 0) { printf("Received data.\n"); if(!fwrite(buffer2, read2, 1, file2)) { printf("file write error\n"); } if(read2 < 128) { fclose(file2); } } } //if we are connected to a friend send him data from the file. //also put what he sends us in a file. if(is_connected(connection) == 3) { if(write_packet(0, buffer1, read1)) { printf("Wrote data.\n"); read1 = fread(buffer1, 1, 128, file1); } read2 = read_packet(0, buffer2); if(read2 != 0) { printf("Received data.\n"); if(!fwrite(buffer2, read2, 1, file2)) { printf("file write error\n"); } if(read2 < 128) { fclose(file2); } } } doDHT(); doLossless_UDP(); //print_clientlist(); //print_friendlist(); //c_sleep(300); c_sleep(1); } shutdown_networking(); return 0; }