![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| High-Level-Programmierung Post Fragen zu C, C + +, Java, SQL, und andere Programmiersprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| Server-Client-Programm | pip3r | High-Level-Programmierung | 9 | 04-17-2008 02:15 AM |
| Client-und Server-Programm von Gen Makefile | wongalan48 | High-Level-Programmierung | 0 | 03-05-2007 01:09 PM |
| Chat-Client-Server-Programm | Powermind | High-Level-Programmierung | 1 | 09-04-2006 12:19 PM |
| Programm zum Übertragen einer Datei von der Client-Rechner an den Server | nathgopi214 | High-Level-Programmierung | 3 | 07-04-2006 07:16 AM |
| Ich möchte, dass ein UDP-Client-Programm erhalten | Nirmala | IP-Networking | 1 | 06-10-2005 04:46 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Client - Server-Programm
Ich kam acors dieser Kodierung, wenn surfin die net.this Code funktioniert perfectly.but wie ich bin neu in diesem Socket-Programmierung Ich brauche SM Kommentare, die auf oder Erläuterungen zu diesen Quellcode. Ich habe Verständnis für die PRB server.ci haben es unter u Jungs kann mir helfen! Cheerz Die server.c Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/time.h>
#define MAX_CLIENTS 64
struct sockaddr_in servaddr;
int addr_len;
struct sockaddr addr;
struct sockaddr_in *ptr;
int cl_addr_len;
struct sockaddr_in cl_addr;
char in_buf[100], out_buf[100];
char names [10][30];
char message[150];
int num_names = 0;
typedef struct cl_info
{
char cl_id[30];
int cl_status;
}cl_info;
cl_info clients[MAX_CLIENTS];
int main(int argc, char **argv)
{
int newsockfd;
int sockfd;
int nbytes;
int max_fd;
int fd;
short func_num;
fd_set test_set, ready_set;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
servaddr.sin_family - AF_INET;
servaddr.sin_port = 0; /*choose an unused port at random */
servaddr.sin_addr.s_addr = INADDR_ANY; /* auto fill with my IP address */
bind(sockfd,(struct sockaddr*) &servaddr, sizeof(servaddr));
addr_len = sizeof(addr);
getsockname(sockfd, &addr, &addr_len);
ptr = (struct sockaddr_in *)&addr;
printf("\nServer on port# %d\n", ptr->sin_port);
listen(sockfd, 5);
max_fd = sockfd;
FD_ZERO(&test_set); /*clear the listening socket */
FD_SET(sockfd, &test_set);
while(1)
{
memcpy(&ready_set, &test_set, sizeof(test_set));
select(max_fd+1, &ready_set, NULL, NULL, NULL);
if(FD_ISSET(sockfd, &ready_set)) /*if listening sock has data its a call from new client */
{
/*create a new socket */
cl_addr_len = sizeof(cl_addr);
newsockfd = accept(sockfd, (struct sockaddr *)&cl_addr, &cl_addr_len);
printf("\nA new connection has been made to socket %d\n", newsockfd);
FD_SET(newsockfd, &test_set); /* add new socket to list */
if(newsockfd > max_fd)
max_fd = newsockfd; /*update max_fd with new socket file discriptor */
} /*end if*/
for(fd=0; fd <= max_fd; fd++) /*loop through connected socket file discriptors */
{
if((fd !=sockfd) && FD_ISSET(fd, &ready_set))/*bypass listening sock if sock has data*/
if(process_call(fd, max_fd) == 0) /*if socket is closed */
{
printf("\nThe listening socket is now closed\n");
close(newsockfd);
printf("\nClient on socket %d has left the room\n", sockfd);
FD_CLR(fd, &test_set); /*remove socket from list */
/*decrement user count */
} /*end if */
} /* end for loop */
} /*end while loop */
return 0;
} /*end main */
int add_name(int sockfd)
{
int nbytes;
short name_len;
short n_name_len;
printf("\nAdding name .....\n");
nbytes = read(sockfd, (char *)&name_len, sizeof(short));
name_len = ntohs(name_len); /*convert name_len from network to host short */
memset(clients[sockfd].cl_id, 0, 30); /*set all bytes to zero */
nbytes = read(sockfd, clients[sockfd].cl_id, name_len);
num_names ++; /*increment user count */
printf("\n%s has joined the chat room\n", clients[sockfd].cl_id);
/*need to broadcast user has joined plus user id to connected clients here */
} /*end add_name function */
int how_many(int sockfd, int max)
{
int sock;
short user_len;
char username[30];
for(sock = 4; sock <= max; sock++)
{
strcpy(username, clients[sock].cl_id);
user_len = htons(strlen(username));
write(sockfd, (char *)&user_len, sizeof(short));
write(sockfd, username, strlen(username));
send_user_list(sockfd, username);
}
} /*end how_many function */
int send_user_list(int sockfd, char *users)
{
short msg_type;
short user_len;
msg_type = htons(2);
printf("msg_type is : %u\n", msg_type);
write(sockfd, &msg_type, sizeof(short));
user_len = htons(strlen(users));
write(sockfd, (char *)&user_len, sizeof(short));
write(sockfd, users, strlen(users));
}
int find_name(int sockfd, int max)
{
char search_name[30];
int sock;
int found = 0;
short len, name_len;
char sender[30];
short sender_len;
char msg[150];
short msg_len;
memset(search_name, 0, 30); /*set all bytes to zero */
printf("\nReceiving userid......\n");
read(sockfd, (char *)&name_len, sizeof(short));
len = ntohs(name_len);
read(sockfd, search_name, len);
read(sockfd, &msg_len, sizeof(short));
msg_len = ntohs(msg_len);
read(sockfd, msg, msg_len);
msg[msg_len] = '\0';
strcpy(sender, clients[sockfd].cl_id);
for(sock = 4; sock <= max; sock++)
{
printf(" %d is held in max\n", max);
printf("\ncomparing search request for %s with %s username\n",
search_name, clients[sock].cl_id);
if(strcmp(search_name, clients[sock].cl_id) ==0)
{
printf("\nuserid found\n");
found = 1;
send_async_msg(sock, msg,sender);
}/*end if */
} /*end for loop */
if(! found)
{
printf("\nuserid not found\n");
} /*end if */
}/*end find_name function */
int process_call(int newsockfd, int max_fd)
{
int nbytes;
short func_num;
nbytes = read(newsockfd, (char *)&func_num, sizeof(short));
if(nbytes ==0)
return 0;
if (nbytes != sizeof(short))
{
perror("\nUnknown menu option!\n");
exit(1);
} /* end if */
func_num = ntohs(func_num);
switch(func_num)
{
case(1):
add_name(newsockfd);
break;
case(2):
how_many(newsockfd, max_fd);
break;
case(3):
find_name(newsockfd, max_fd);
break;
case(4):
send_global_msg(newsockfd, max_fd);
break;
case(5):
printf("\nShutting down Server...\n");
exit(0);
default:
printf("\nUnknown function number!\n");
break;
} /*end switch */
} /*end process_call function */
int send_async_msg(int sockfd, char * msg, char *sender)
{
short msg_type;
short msg_len;
short sender_len;
msg_type = htons(1);
printf("msg_type is : %u\n", msg_type);
write(sockfd, &msg_type, sizeof(short));
msg_len = htons(strlen(msg));
write(sockfd, (char *)&msg_len, sizeof(short));
write(sockfd, msg, strlen(msg));
sender_len = htons(strlen(sender));
write(sockfd, (char *)&sender_len, sizeof(short));
write(sockfd, sender, strlen(sender));
}/* end of send_async_msg function */
int send_global_msg(int sockfd, int max_fd)
{
int nbytes;
int sock;
short len;
short msg_type;
char msg[150];
char sender[30];
short sender_len;
strcpy(sender, clients[sockfd].cl_id);
msg_type = 1;
memset(in_buf, 0, sizeof(in_buf)); /*set all to zero */
nbytes = read(sockfd, &len, sizeof(short));
len = ntohs(len);
read(sockfd, msg, len);
message[len] = '\0';
for(sock = 4; sock <= max_fd; sock++)
{
send_async_msg(sock, msg, sender);
} /*end for loop */
} /* end of send_global_msg function */
Zuletzt bearbeitet von reborg; am 09-16-2006 04:51 PM.. |
|
||||
|
lesen Sie bitte meine Post
Zitat:
Danke. |
|
||||
|
Hallo
Zitat:
Hallo, Danke. Sie alle bereit mir Antwort über die Gewinnung von String und dann drucken Sie es aus. Ich dachte, niemand sah ihn. In Zukunft werde ich warten, für eine lange Zeit, bevor sie wieder. Meine Frage war, wie man eine bestimmte Zeichenkette aus einer Datei mit sscanf () und dann ausgedruckt bekommt. Ich habe die Antwort. Aber jetzt frage ich mich, ob es möglich ist, um die mehr als ein String aus mehr als eine Zeile aus einer Datei. Sprich, wir haben eine Datei, cat / proc / cpuinfo Prozessor: 0 vendor_id: GenuineIntel cpu family: 15 Modell: 2 Modell Name: Intel (R) Celeron (R) CPU 2.60GHz Verstärkung: 9 cpu MHz: 2591.654 Cache-Größe: 128 KB fdiv_bug: keine hlt_bug: keine f00f_bug: keine coma_bug: keine FPU: ja fpu_exception: ja CPUID-Ebene: 2 wp: yes Flags: FPU vme de pse Und ich will, um die vendor_id: GenuineIntel Modell: 2 Modell Name: Intel (R) Celeron (R) CPU 2.60GHz Ich weiß, dass es möglich ist, durch wrting den folgenden Code drei Mal in diesem Fall, wie wir sind Gewinnung drei Saiten hier. if (NULL \u003d\u003d (fp \u003d fopen (argv [1], "rt "))){ printf ( "Can't open% s \ n", argv [1]); exit (1); ) for (; fgets (buf, 255, fp) (if (buf \u003d\u003d strstr (buf, "model name")) ( if (null! \u003d (p \u003d strchr (buf,':'))) printf ( "% s \ n", p + 1); break; ) Aber ist es eine Möglichkeit, für die ich schreiben können den Code nur einmal, sondern können Extrakt bestimmte Zeichenketten und drucken Sie diese auf einmal eine nach der anderen. Und außerdem ist es eine Möglichkeit, so dass in einer C-Datei kann ich öffnen mutiple Dateien von Kommandozeilen-Argument, eine nach der anderen. Sagen, nachdem ich mich mit Druck vendor_id, Modell-Typ und Modell-Namen aus cpuinfo Datei aus / proc-Verzeichnis, ich die stat Datei aus dem / proc-Verzeichnis und starten Sie das Extrahieren von bestimmten Strings und den Druck wieder. Ist das ein sehr compilcated oder viel einfacher. Bitte lassen Sie mich wissen, wie man es macht, wenn Sie wissen. Und auch, wenn wir eine Zeichenkette extrahieren, sagen, CPU-Familie: 15, 15 ist ein String. Sprich, ich möchte konvertieren String 15 auf eine ganze Zahl, so, ich atoi (), sondern drucken Sie es aus, ich habe zu tun, der nach rechts? int number \u003d atoi (p); printf ( "Die Integer-Wert ist:% d \ n", number); Aber auch ich kann nicht drucken, der Integer-Wert. Also, ich glaube, ich bin etwas fehlt. Was auch immer ich helfen kann, werde ich sehr dankbar. Danke. ![]() |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|