免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1127 | 回复: 6
打印 上一主题 下一主题

各位老大,通信问题。。。急,帮忙!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-13 18:43 |只看该作者 |倒序浏览
各位老大:::
   一个并发TCP服务器实例  

#include  
#include  
#include  
#include  
#include  
#define MY_PORT         8888

int main(int argc ,char **argv)
{
int listen_fd,accept_fd;
struct sockaddr_in     client_addr;
int n;
  
if((listen_fd=socket(AF_INET,SOCK_STREAM,0))<0)
  {
        printf("Socket Error:%s\n\a",strerror(errno));
        exit(1);
  }
  
bzero(&client_addr,sizeof(struct sockaddr_in));
client_addr.sin_family=AF_INET;
client_addr.sin_port=htons(MY_PORT);
client_addr.sin_addr.s_addr=htonl(INADDR_ANY);
n=1;

setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(int));
if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0)
  {
        printf("Bind Error:%s\n\a",strerror(errno));
        exit(1);
  }
  listen(listen_fd,5);
  while(1)
  {
   accept_fd=accept(listen_fd,NULL,NULL);
   if((accept_fd<0)&&(errno==EINTR))
          continue;
   else if(accept_fd<0)
    {
        printf("Accept Error:%s\n\a",strerror(errno));
        continue;
    }
  if((n=fork())==0)
   {
        /* 子进程处理客户端的连接 */
        char buffer[1024];

        close(listen_fd);
        n=read(accept_fd,buffer,1024);
        write(accept_fd,buffer,n);
        close(accept_fd);
        exit(0);
   }
   else if(n<0)
        printf("Fork Error:%s\n\a",strerror(errno));
   close(accept_fd);
  }
}  
其中在子进程中将套接字listen_fd关掉后,那么listen还怎么根据此套接字去侦听呀???

论坛徽章:
0
2 [报告]
发表于 2004-03-13 18:56 |只看该作者

各位老大,通信问题。。。急,帮忙!!

还有,就是这个程序接受连接请求后,最多可以fork 多少个子进程来执行呀,,这些个子进程是并发执行吗?还是等一个执行完成,另一个在执行,,还有既然在子进程已经将 accept_fd关掉了,为什么父进程中还要执行?

论坛徽章:
0
3 [报告]
发表于 2004-03-13 18:57 |只看该作者

各位老大,通信问题。。。急,帮忙!!

用它accept_fd去做。
这几乎是一个固定的写法。具体的用法,在精华区里有,可以看看fork方面的帖子!,一定或有收获

论坛徽章:
0
4 [报告]
发表于 2004-03-13 18:59 |只看该作者

各位老大,通信问题。。。急,帮忙!!

楼上的老大,可以讲的清楚点?

论坛徽章:
0
5 [报告]
发表于 2004-03-13 19:18 |只看该作者

各位老大,通信问题。。。急,帮忙!!

精华里有太多这样的讨论,你可以索引一下faq。其实不是不回答,这是一句半句也说不清楚,其实答案和精华里的帖子差不多,更何况那是很多人讨论的结果,比我一个人白话要好,所以建议你去那里找找答案。如果在不明白,再来问问。这样节省大家的时间和精力!
thank

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-03-14 16:51 |只看该作者

各位老大,通信问题。。。急,帮忙!!

建议看《unix环境高级编程》进程部分
和《unix网络编程:卷一》前几章。

论坛徽章:
0
7 [报告]
发表于 2004-03-15 08:26 |只看该作者

各位老大,通信问题。。。急,帮忙!!

1,fork后,父子进程都有sd,fork 一般情况下4,5 个是比较稳定的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP