当前位置:  技术问答>linux和unix

关于socket编程,困扰中.(求助,万分感激)

    来源: 互联网  发布时间:2015-02-28

    本文导语:  我在用socket编程时服务器端使用子进程去处理连接后的通信. 代码如下: int Init_Net_OP() {   int sockfd,connfd;   struct sockaddr_in serv_addr,client_addr;   int sin_size;   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)   {     fprintf(stde...

我在用socket编程时服务器端使用子进程去处理连接后的通信.
代码如下:

int Init_Net_OP()
{
  int sockfd,connfd;
  struct sockaddr_in serv_addr,client_addr;
  int sin_size;

  if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
  {
    fprintf(stderr,"socket error!n");
    return -1;
  }

  serv_addr.sin_family=AF_INET;
  serv_addr.sin_port=htons(SERV_PORT);
  serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);

  if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
  {
    fprintf(stderr,"bind error!n");
    return -1;
  }

  if(listen(sockfd,BACKLOG)==-1)
  {
    fprintf(stderr,"listen error!n");
    return -1;
  }

  while(1)
  {
    sin_size=sizeof(struct sockaddr_in);
    if((connfd=accept(sockfd,(struct sockaddr *)&client_addr,&sin_size))==-1)
    {
      fprintf(stderr,"accept error!n");
      continue;
    }
    printf("server got connection  from%sn",inet_ntoa(client_addr.sin_addr));
    /*
    strcpy(key,"rc6keyabcdefghijllmnopqresuvwxyz");
    server_init(connfd,key);
    */
    
    if(!fork())
    {
      close(sockfd);
      strcpy(key,"rc6keyabcdefghijllmnopqresuvwxyz");
      if(server_init(connfd,key)==-1)//一些初始化操作
      {
        close(connfd);
        close(connfd);
        continue;
      }
      close(connfd);
      exit(0);
    }
    close(connfd);
    while(waitpid(-1,NULL,WNOHANG)>0);
  }
}

现在老师要求我在以后的通信中无论服务器或是客户端都可以随时发送或是接收信息.但是我不懂该怎么做,要实现双方通信就必需一方是write而另一方就是read.这样才能收到吧.   要实现随时可收可发该怎么办呢?

可不可以在服务器的子进程中使用select同时监听这一描述符的听和写呢?就是监听到读就绪就执行read,写就绪就可以write.客户端也用这样的方法,可以吗?
有没有谁可以帮我解决这个问题?感激不尽!!!

|
用select的话可以不用多线程了

|
每个socket都有一个接收缓冲区和一个发送缓冲区,对于“服务器或是客户端都可以随时发送或是接收信息”完全是没问题的,在程序内部做同步就可以了。是你的程序太简单了。接入多个socket可以用select方式。

|
呵呵,你的思路非常正确!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  • 急!关于SOCKET编程,在线等待!
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • 多进程socket编程问题
  • 问一个socket编程问题,急~~~
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 请教一个socket编程问题
  • 求助!!linux下socket编程
  • socket编程,使用recvfrom()函数监听问题。
  • sco unix下socket编程的问题,请大家帮忙
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket iis7站长之家
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3