The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Servidor programa cliente pip3r Alto Nível de programação 9 04-17-2008 02:15
Cliente e servidor programa gen pelo Makefile wongalan48 Alto Nível de programação 0 03-05-2007 01:09
Chat programa cliente-servidor powermind Alto Nível de programação 1 09-04-2006 12:19
programa para transferir um ficheiro a partir de máquina cliente para o servidor nathgopi214 Alto Nível de programação 3 07-04-2006 07:16
Eu quero um programa que recebe Cliente UDP Nirmala IP Networking 1 06-10-2005 04: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 Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 09-16-2006
mathu mathu is offline
Usuário
  
 

Join Date: Sep 2006
Posts: 1
Cliente - servidor programa

Eu vim acors esta codificação quando surfin o net.this código funciona perfectly.but como eu sou novo a esta tomada de programação Preciso sm citou comentários sobre ela ou explicação a respeito deste código fonte.
Tenho o entendimento PRB server.ci já postou-o abaixo
u guys pode me ajudar!
cheerZ


O server.c
Código:
#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 */

Última edição por reborg; em 09/16/2006 04:51..
  #2 (permalink)  
Old 09-16-2006
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Join Date: Mar 2005
Localização: nó folha na árvore B +
Mensagens: 2.957
tivesse havido tantos lugares para a rede de programação arrancadores

essa é uma beej da guia de n / w prg

você pode procurar o fórum para mais
  #3 (permalink)  
Old 09-16-2006
Sharmin Sharmin is offline
Usuário
  
 

Join Date: Sep 2006
Posts: 6
leia meu post

Citação:
Originally Posted by matrixmadhan
tivesse havido tantos lugares para a rede de programação arrancadores

essa é uma beej da guia de n / w prg

você pode procurar o fórum para mais
você queira responder a minha pergunta por favor que eu tenho postado 2 horas atrás.

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

Join Date: Mar 2005
Localização: nó folha na árvore B +
Mensagens: 2.957
Qual é o lugar que você se refere?
é que de alguma outra discussão?
  #5 (permalink)  
Old 09-17-2006
Sharmin Sharmin is offline
Usuário
  
 

Join Date: Sep 2006
Posts: 6
Olá

Citação:
Originally Posted by matrixmadhan
Qual é o lugar que você se refere?
é que de alguma outra discussão?

Olá,

obrigado. Está tudo pronto me deu resposta sobre a seqüência e, em seguida, extrair impressão para fora. Eu pensei que ninguém viu.

No futuro, eu vou esperar por um longo tempo, antes de pedir novamente. A minha pergunta foi como extrair uma seqüência específica de um arquivo com sscanf () e, em seguida, imprimir-lo.

Eu tenho a resposta. Mas agora pergunto-me se é possível extrair mais de uma cadeia de mais de uma linha de um arquivo. Diga-me, temos um arquivo,

cat / proc / cpuinfo

processador: 0
vendor_id: GenuineIntel
cpu family: 15
modelo: 2
Nome do modelo: Intel (R) Celeron (R) CPU 2.60GHz

stepping: 9
cpu MHz: 2591.654
cache size: 128 KB
fdiv_bug: nenhuma
hlt_bug: nenhuma
f00f_bug: nenhuma
coma_bug: nenhuma
FPu: sim
fpu_exception: sim
CPUID nível: 2
wp: yes
flags: FPu VME de pse

E eu quero extrair

vendor_id: GenuineIntel
modelo: 2
Nome do modelo: Intel (R) Celeron (R) CPU 2.60GHz

Sei que é possível por wrting o seguinte código três vezes, neste caso, como estamos extraindo três cordas aqui.

if (NULL \u003d\u003d (fp \u003d fopen (argv [1], "rt "))){
printf ( "Não é possível abrir% s \ n", argv [1]);
exit (1);
)
for (; fgets (buf, 255, fp)(
if (buf \u003d\u003d strstr (buf, "modelo de nome")) (
if (NULL! \u003d (p \u003d strchr (buf,':')))
printf ( "% s \ n", p + 1);
break;
)

Mas há um caminho, para que eu possa escrever o código uma vez, mas pode extrair algumas cordas e imprimi-las, de uma só vez uma após a outra.

E também, há uma maneira, e que, em um arquivo C posso abrir arquivos mutiple pelo argumento da linha de comandos, um após o outro. Diga-me, depois que eu sou feito com impressão vendor_id, modelo tipo, e nome do modelo, a partir de cpuinfo arquivo do / proc diretório, vou abrir a stat a partir do arquivo / proc Diretório e iniciar extrair algumas cordas específicas e imprimir-los novamente. Será que uma maneira muito compilcated ou muito simples. Por favor, deixe-me saber como fazer isso se você sabe.

E também, quando se extrair uma seqüência, digamos, cpu family: 15, 15 é um tipo string. Diga-me, eu quero converter uma cadeia de 15 a inteira, assim, eu uso atoi (), mas, para imprimi-lo, eu tenho que fazer o seguinte certo?

int número \u003d atoi (p);
printf ( "O valor inteiro é:% d \ n", número);

Mas também não posso imprimir o valor inteiro. Então, acho que estou perdendo algo.

A ajuda que pode chegar, vou ficar muito agradecido.
Obrigado.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 04:43.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0