#include<header.h>
#define SER_PORT 8888
#define SER_IP "192.168.125.125"
void handler(int signo)
{
if(signo == SIGCHLD)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}
}
int main(int argc, const char *argv[])
{
if(signal(SIGCHLD, handler) == SIG_ERR)
{
perror("signal error");
return -1;
}
int sfd = socket(AF_INET, SOCK_STREAM, 0);
if(sfd == -1)
{
perror("socket error");
return -1;
}
printf("socket success sfd = %d\n", sfd);
int reuse = 1;
if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1)
{
perror("setsockopt error");
return -1;
}
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) ==-1)
{
perror("bind error");
return -1;
}
printf("bind success\n");
if(listen(sfd, 128)==-1)
{
perror("listen error");
return -1;
}
printf("listen success\n");
struct sockaddr_in cin;
socklen_t addrlen = sizeof(cin);
int newfd = -1;
while(1)
{
newfd = accept(sfd, (struct sockaddr*)&cin, &addrlen);
if(newfd == -1)
{
perror("accept error");
return -1;
}
printf("[%s:%d]:发来连接请求\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));
pid_t pid = fork();
if(pid > 0)
{
close(newfd);
}else if(pid == 0)
{
close(sfd);
char rbuf[128] = "";
while(1)
{
bzero(rbuf, sizeof(rbuf));
int res = recv(newfd, rbuf, sizeof(rbuf), 0);
if(res == 0)
{
printf("客户端已经下线\n");
break;
}
printf("[%s:%d]:%s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), rbuf);
strcat(rbuf, "*_*");
send(newfd, rbuf, strlen(rbuf), 0);
printf("发送成功\n");
}
close(newfd);
exit(EXIT_SUCCESS);
}else
{
perror("fork error");
return -1;
}
}
close(sfd);
return 0;
}
include<header.h>
define SER_PORT 8888
define SER_IP "192.168.125.125"
truct INFO
int newfd;
struct sockaddr_in cin;
;
oid * deal_cli_msg(void* arg)
int newfd = ((struct INFO*)arg)->newfd;
struct sockaddr_in cin = ((struct INFO*)arg)->cin;
char rbuf[128] = "";
while(1)
{
bzero(rbuf, sizeof(rbuf));
int res = recv(newfd, rbuf, sizeof(rbuf), 0);
if(res == 0)
{
printf("客户端已经下线\n");
break;
}
printf("[%s:%d]:%s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), rbuf);
strcat(rbuf, "*_*");
send(newfd, rbuf, strlen(rbuf), 0);
printf("发送成功\n");
}
close(newfd);
pthread_exit(NULL);
nt main(int argc, const char *argv[])
int sfd = socket(AF_INET, SOCK_STREAM, 0);
if(sfd == -1)
{
perror("socket error");
return -1;
}
printf("socket success sfd = %d\n", sfd);
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) ==-1)
{
perror("bind error");
return -1;
}
printf("bind success\n");
if(listen(sfd, 128)==-1)
{
perror("listen error");
return -1;
}
printf("listen success\n");
struct sockaddr_in cin;
socklen_t addrlen = sizeof(cin);
while(1)
{
int newfd = accept(sfd, (struct sockaddr*)&cin, &addrlen);
if(newfd == -1)
{
perror("accept error");
return -1;
}
printf("[%s:%d]:发来连接请求\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));
struct INFO buf = {newfd,cin};
pthread_t tid = -1;
if(pthread_create(&tid,NULL,deal_cli_msg,&buf) == -1)
{
printf("pthread_creat error\n");
return -1;
}
pthread_detach(tid);
}
close(sfd);
return 0;