69,373
社区成员
发帖
与我相关
我的任务
分享
。
。
。
。
//用int数组来保存与服务器连接成功的socket
if((clientfd[i] = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) == -1)
{
perror("accept");
exit(1);
}else
{
i++;
}
printf("accept from:%d\n",inet_ntoa(their_addr.sin_addr));
send(clientfd[i-1],WELCOME,strlen(WELCOME),0);//发送问候信息
buf = (char *)malloc(255);
//显示accept()返回的描述符
printf("clientfh:%d",clientfd[i-1]);
ppid = fork();//创建子进程
if(ppid == 0)
{
pid = fork(); //创建子进程
while(1)
{
if(pid > 0)
{
int j;
for( j=0;j<i;j++){
if((recvbytes = recv(clientfd[i-1],buf,255,0)) <= 0)
{
perror("recv1");
close(clientfd[i-1]);
raise(SIGKILL);//raise()向正在执行的程序发送信号,
exit(1);
}else{break;}
}
//显示发送到缓冲区的消息和那个socket接受的
printf(" %s,%d\n",buf,clientfd[j]);
//要向那个客户端发送数据在buf的第一个字符
switch(buf[0])
{
case '0':choice=0;break;
case '1':choice=1;break;
case '2':choice=2;break;
case '3':choice=3;break;
case '4':choice=4;break;
default:break;
}
//在服务器显示内容
printf(" %s\n",buf);
//向指定客户端发送消息
if(send(clientfd[choice],buf,strlen(buf),0) == -1)
{
perror("send");
}
}
//一开始send()在下面的子进程里,可是子进程里的代码却执行不了于是我就放到上面去勒,准备再开改一下
else if(pid == 0)//子进程发送消息
{
if(send(clientfd[choice],buf,strlen(buf),0) == -1)
{
perror("send");
}
。
。
。
。