大神们空降这里求指导!!!!

wocawuliao wocawuliao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

。
。
。
。
//用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[j],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");
}
。
。
。
。

第35行clientfd数组里是i-1的时候后建立连接的客户端2可以向客户端1发送消息,但当客户端1向客户端2发送消息时服务器会显示send: Socket operation on non-socket,此时clientfd[i-1]恒等于是客户端2的描述符,所以我想因该是recv()函数那块处理的不好???
...全文
评论 2
收藏 已收藏
分享
返回顶部
wocawuliao
C语言 70,039 成员 243,237 内容