一个十分好SOCKET程序源代码(服务器端)

来源:互联网 发布:360云盘 mac 版本下载 编辑:程序博客网 时间:2024/06/06 07:28
/*
Servidor de escucha en un puerto.
Listening server on a port.
By:
Por:
Oscar Medina Duarte
is111936@mail.udlap.mx
Linux> gcc server1.c
Solaris> cc server1.c -lxnet -lnsl -lsocket
*/
#include <sys/socket.h>
#include <errno.h>
#include <signal.h>
#include <string.h>

#define NUMERODEPUERTO 6666;

extern int apagar=0;

void signalhd(int senal);
void protocolo_control(int);

main() {
struct sockaddr_in sin, fsin;
int s, ssock, alen;
char *rchs;


sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = NUMERODEPUERTO;

if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
perror("Cant create socket");
exit(1);
}
if (bind(s, (struct sockaddr *)&sin, sizeof sin) < 0) {
perror("Cant assign addres");
exit(2);
}
if (listen(s, 5) < 0) {
perror("Cant turn to listening mode");
exit(3);
}
signal (SIGCHLD, SIG_IGN);
signal (SIGINT,signalhd);
while (1) {
if (apagar){
close(s);
exit(0);
}
alen = sizeof(fsin);
if ((ssock=accept(s, (struct sockaddr *)&fsin, &alen)) < 0) {
if (errno == EINTR) continue;
perror("Accept failed");
exit(4);
}

rchs=(char *)inet_ntoa(fsin.sin_addr);
printf("/nConexion from : %s/n", rchs);

switch (fork()) {
case -1:{
perror ("Forking error");
exit (5);
}
case 0: {
close(s);
protocolo_control(ssock);
exit(0);
}
default: {
close(ssock);
break;
}
}
}
}

void protocolo_control(int Descriptor){
char buf[4096];
int cc;
cc = read (Descriptor, buf, sizeof buf);


if (cc > 0) {

printf("Readed data :/n%s/n", buf);

write(Descriptor, buf, strlen(buf));
}


}

void signalhd(int senal){
if (senal==SIGINT){
printf("...Interrupt.../n");
apagar=1;
}
}
原创粉丝点击