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

socket 初级问题。大家指教。

    来源: 互联网  发布时间:2016-06-19

    本文导语:  listen的第二个参数指定排队的个数,但是listen接收到一个socket连接后就返回了,那怎么等待和返回下一个连接? | 给你贴段代码,其实很简单的。  bind (m_hSocket, (struct sockaddr*)&m_nLocalAddr, sizeo...

listen的第二个参数指定排队的个数,但是listen接收到一个socket连接后就返回了,那怎么等待和返回下一个连接?

|
给你贴段代码,其实很简单的。
 bind (m_hSocket, (struct sockaddr*)&m_nLocalAddr, sizeof(m_nLocalAddr));
 listen (m_hSocket, 5);
 socklen_t addrLen = sizeof (struct sockaddr);
while(true)
{
m_acSocket = accept (m_hSocket, (struct sockaddr *)&m_nPeerAddr, &addrLen);
        printf ("accept onen");
        char buff[1400];
        memset (buff, 0, 1400);

        int len = 0;
        len = recv( m_acSocket, buff, 1024, 0);
printf("n%sn",buff);
}

如果接收的数据多,或者是比较费时,上面红色的部分可以放到线程里执行。

|
还是用这个代码做例子,如果你要让接收端一直等着别人的消息,就是下面这样:
  bind (m_hSocket, (struct sockaddr*)&m_nLocalAddr, sizeof(m_nLocalAddr));
  listen (m_hSocket, 5);
  socklen_t addrLen = sizeof (struct sockaddr);
 while(true)
 {
 m_acSocket = accept (m_hSocket, (struct sockaddr *)&m_nPeerAddr, &addrLen);
          printf ("accept onen");
char buff[1400];
          memset (buff, 0, 1400);

          int len = 0;
          len = recv( m_acSocket, buff, 1024, 0);
  printf("n%sn",buff);
 }
不知道你说的5个socket是指什么,有5个socket给接收端发消息?还是指有5个m_acSocket?

    上面代码中每次while里的m_acSocket都是不一样的,你可以打印地址看下。只是因为每个循环中需要处理的内容(红色部分)较少,因此就等第一次接收完,再accept第二个连接,接第二m_acSocket的数据,。。。。
    如果是红色部分,也就是你要从这个m_acSocket收发的数据太多,比较费时,你仍然可以用上述形式,只是这样的话,第一次accept后,假如需要两分钟来收数据,那第二个连接就得等2分钟后才能accept了,效率是不是很低?因此,这种情况下最好把红色部分放到线程里。

    
 
 

您可能感兴趣的文章:

  • socket accept问题,大家指教。
  • socket编程中的问题,请各位大侠指教!
  • socket 编程两问,请大家指教?
  • linux下socket连接数怎么扩充到1024以上.请指教.谢谢
  • 一个socket阻塞问题 ,请多多指教!!!(只剩下100分了)
  • 请问如何捕获linux c SOCKET中SEND的错误,请指教,谢谢!
  • 发送UDP,Socket operation on non-socket,初学,请指教
  • socket套接字的问题,求指教啊
  • socket编程问题,大家指教。
  • 真的很急,socket发送中文信息时,接收端显示有误,请指教
  • 为什么SOCKET编程时遇到这么奇怪的问题, acceptt接受客户端时总是返回-1,请高手指教,急!!!!!!!!!!!!!!
  • 通过Socket通信处理XML时遇到的问题,请指教
  • linux下的socket并发服务器的编写问题,请高手指教
  • linux socket问题。。怎样获得已帮定特定port的一个套接字socket
  • 关于socket概念的理解问题!
  • socket编程 中的bind问题
  • 你是否可以回答Socket的问题?数据先后问题
  • 多进程socket编程问题
  • Socket的问题
  • socket客户端程序的问题
  • 关于多网口socket通信的简单问题
  • fgets用在SOCKET流上的问题
  • linux socket fd 写阻塞问题
  • linux下用socket实现多进程间通信问题?
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • sco unix下socket编程的问题,请大家帮忙
  • 请问socket方面的问题
  • 急!!请教关于linux socket编程的一个问题!!
  • socket编程,使用recvfrom()函数监听问题。
  • linux下socket编程问题!
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!


  • 站内导航:


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

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

    浙ICP备11055608号-3