здравейте изкам да попитам защо от тези два кода първия работи а втория не
1
GeSHi (C):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
#include <sys/select.h>
int main(int argc,char *argv[]){
int port,sock, check,newsock,a,b,yes;
char buf[255],buf1[255],buf2[255];
struct sockaddr_in server,client1;
socklen_t len=sizeof(client1);;
fd_set read,master;
port=atoi(argv[1]);
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=INADDR_ANY;
sock=socket(AF_INET,SOCK_STREAM,0);
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes));
bind(sock,(struct sockaddr *)&server, sizeof(server));
listen(sock,10);
FD_ZERO(&master);
FD_SET(sock,&master);
FD_SET(0,&master);
for(;;){
gore:
read=master;
select(FD_SETSIZE,&read,NULL,NULL,NULL);
for(a=0;a<FD_SETSIZE;a++){
if(FD_ISSET(a,&read)&&a!=0){
if(a==sock){
newsock=accept(sock,(struct sockaddr*)&client1,&len);
FD_SET(newsock,&master);
inet_ntop(AF_INET, &(client1.sin_addr), buf1, INET_ADDRSTRLEN);
printf("New connection from socket %d ip address %s port %d\n",newsock
, buf1
, n
}
else{
check=recv(a,buf,sizeof(buf),0);
if(!check){
close(a);
FD_CLR(a,&master);
goto gore;}
buf[check]='\0';
}
}
else if(FD_ISSET(0,&read)){
gets(buf1);
gets(buf2);
check=strlen(buf1);
buf[check]=0;
b=atoi(buf2);
if(b==3){
printf("Trqbva da ne se izpra6tat syob6teniq do ekrana\n");
goto gore;}
send(b,buf1,strlen(buf1),0);
goto gore;
}
}
}
return 0;}
2
GeSHi (C):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
int a,b,sock,newsock,port;
char buf[255];
fd_set read;
struct sockaddr_in server,client;
socklen_t clilen;
memset(&server,0,sizeof(server));
clilen=sizeof(server);
sock=socket(AF_INET,SOCK_STREAM,0);
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(atoi(argv[1]));
bind(sock,(struct sockaddr *)&server,sizeof(server));
listen(sock,10);
while(1){
FD_ZERO(&read);
for(a=sock;a<FD_SETSIZE;a++) FD_SET(a,&read);
select(FD_SETSIZE,&read,NULL,NULL,NULL);
for(a=sock;a<FD_SETSIZE;a++)
if(FD_ISSET(a,&read)){
if(a==sock) newsock=accept(sock,(struct sockaddr*) &server, &clilen);
else{
b=recv(a,buf,sizeof(buf),0);
buf[b]=0;
}}}
return 0;}