The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > High Level Programming
.
google unix.com



High Level Programming Post frågor om C, C + +, Java, SQL och andra programmeringsspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Server klientprogrammet pip3r High Level Programming 9 04-17-2008 01:15
Klient och server program gen av Makefile wongalan48 High Level Programming 0 03-05-2007 01:09
Chat client-server-program powermind High Level Programming 1 09-04-2006 11:19
program för att överföra en fil från klientdatorn till servern nathgopi214 High Level Programming 3 07-04-2006 06:16
Jag vill ha en UDP Kundrecensioner mottagande program Nirmala IP Nätverk 1 06-10-2005 03:46

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 Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 09-16-2006
mathu mathu is offline
Registered User
  
 

Join Date: Sep 2006
Inlägg: 1
Klient - server program

Jag kom acors denna kodning när surfin den net.this koden fungerar perfectly.but eftersom jag är ny för denna socket programmering Jag behöver sm coments noterade på den eller förklaring om denna källkod.
Jag har PRB förstå server.ci har skickat den nedan
kan u killar hjälp mig!
cheerZ


Den server.c
Kod:
#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 */

Senast redigerad av reborg; 09-16-2006 vid 03:51..
  #2 (permalänk)  
Old 09-16-2006
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Join Date: mars 2005
Ort: löv i B + träd
Inlägg: 2.953
det hade funnits så många tjänster för nätverk programmering startkopplare

en sådan är beej guide till n / w prg

Du kan söka ett forum för mer
  #3 (permalänk)  
Old 09-16-2006
Sharmin Sharmin is offline
Registered User
  
 

Join Date: Sep 2006
Inlägg: 6
läs mina inlägg

Citat:
Ursprungligen postat av matrixmadhan
det hade funnits så många tjänster för nätverk programmering startkopplare

en sådan är beej guide till n / w prg

Du kan söka ett forum för mer
Kan du svara på min fråga du att jag har betalat för 2 timmar sen.

Tack.
  #4 (permalänk)  
Old 09-17-2006
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Join Date: mars 2005
Ort: löv i B + träd
Inlägg: 2.953
vad som är den tjänst som du hänvisar till?
är att från en annan tråd??
  #5 (permalänk)  
Old 09-17-2006
Sharmin Sharmin is offline
Registered User
  
 

Join Date: Sep 2006
Inlägg: 6
Hej

Citat:
Ursprungligen postat av matrixmadhan
vad som är den tjänst som du hänvisar till?
är att från en annan tråd??

Hej,

tack. Du alla redo gav mig svaret om utvinna strängen och sedan skriva ut det. Jag trodde att ingen såg det.

I framtiden kommer jag att vänta på en lång tid, innan frågar igen. Min fråga var hur man kan utvinna en viss sträng från en fil med sscanf () och sedan skriva ut det.

Jag fick svar. Men nu undrar jag om det är möjligt att utvinna mer än en sträng från mer än en linje från en fil. Säg, vi har en fil,

cat / proc / cpuinfo

processor: 0
vendor_id: GenuineIntel
cpu family: 15
Modell: 2
modellnamn: Intel (R) Celeron (R) CPU 2.60GHz

Förstärkning: 9
cpu MHz: 2591.654
cache-storlek: 128 KB
fdiv_bug: ingen
hlt_bug: ingen
f00f_bug: ingen
coma_bug: ingen
fpu: ja
fpu_exception: ja
cpuid nivå: 2
wp: ja
flags: fpu VME DE PSE

Och jag vill extrahera

vendor_id: GenuineIntel
Modell: 2
modellnamn: Intel (R) Celeron (R) CPU 2.60GHz

Jag vet att det är möjligt genom wrting följande kod tre gånger i detta fall eftersom vi utvinna tre strängar här.

if (NULL \u003d\u003d (fp \u003d fopen (argv [1], "rt "))){
printf ( "Cannot 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;
)

Men är det ett sätt, som jag kan skriva koden en gång men kan extrahera några specifika strängar och skriva ut dem på en gång den ena efter den andra.

Och dessutom är det ett sätt så att i en C-fil jag kan öppna mutiple filer från kommandoraden argument, den ena efter den andra. Säga efter jag är klar med utskriften vendor_id, modell typ och modell namn från cpuinfo fil från / proc katalog jag öppnar Stat fil från / proc katalog och börja utvinna vissa specifika strängar och skriva ut dem igen. Är det en mycket compilcated sätt mycket enkel. Hör av dig hur man gör det om du vet.

Och även när vi utvinna en sträng, säger cpu family: 15, 15 är en typ string. Säg att jag vill konvertera string 15 till ett heltal, så jag använder atoi (), men att skriva ut det, måste jag göra följande rätt?

int antal \u003d atoi (p);
printf ( "The heltalsvärde är:% d \ n", antal);

Men även jag kan inte skriva ut heltalsvärde. Så jag tror att jag saknade något.

Oavsett vilken hjälp jag kan få, jag kommer att vara mycket tacksam.
Tack.
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 11:49.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0