The UNIX and Linux Forums  

Go Back   Die UNIX-und Linux-Foren > Top Foren > High-Level-Programmierung
.
Google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 09-16-2006
mathu mathu is offline
Registrierte Nutzer
  
 

Join Date: Sep 2006
Beiträge: 1
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..
  #2 (permalink)  
Old 09-16-2006
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Join Date: März 2005
Ort: Blattknoten in B + Baum
Posts: 2960
es waren so viele Stellen für die Netzwerk-Programmierung Starter

Eine solche ist Beej Leitfaden für die N / W prg

Sie können das Forum für mehr
  #3 (permalink)  
Old 09-16-2006
Sharmin Sharmin is offline
Registrierte Nutzer
  
 

Join Date: Sep 2006
Beiträge: 6
lesen Sie bitte meine Post

Zitat:
Zitat von matrixmadhan
es waren so viele Stellen für die Netzwerk-Programmierung Starter

Eine solche ist Beej Leitfaden für die N / W prg

Sie können das Forum für mehr
Würden Sie bitte meine Frage beantworten Sie bitte, dass ich haben 2 Stunden.

Danke.
  #4 (permalink)  
Old 09-17-2006
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Join Date: März 2005
Ort: Blattknoten in B + Baum
Posts: 2960
Was ist die Nachricht, die Sie sich beziehen?
ist, dass aus einem anderen Thread?
  #5 (permalink)  
Old 09-17-2006
Sharmin Sharmin is offline
Registrierte Nutzer
  
 

Join Date: Sep 2006
Beiträge: 6
Hallo

Zitat:
Zitat von matrixmadhan
Was ist die Nachricht, die Sie sich beziehen?
ist, dass aus einem anderen Thread?

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.
Closed Thread

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 07:39 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0