搜索
bottom↓
回复: 3

Winsocket 多线程TCP编程 无法关闭端口

[复制链接]

出0入8汤圆

发表于 2012-6-21 08:28:53 | 显示全部楼层 |阅读模式
连接能正常,但是但连接断开后再次连接时,调式工具提示“本地端口还没有完全释放”,关闭socket不就是调用closesocket()就可以了吗??
  1. #include <stdafx.h>
  2. #include "Sever.h"
  3. #include <stdio.h>
  4. struct ConnetInfo
  5. {
  6.         SOCKET ConnetedSocket;
  7.         SOCKADDR_IN addrClient;
  8. };
  9.         SOCKET SeverListenSocket;
  10.         SOCKET ConnetSocket;
  11.         UINT16 test=123;

  12. struct        ConnetInfo ConnetSocketInfo;

  13. DWORD WINAPI SeverListenThread(LPVOID lpParamter)
  14. {

  15.         printf("进入监听线程\r\n");
  16.         //加载套接字库
  17.         WORD wVersionRequested;
  18.         WSADATA wsaData;
  19.         int err;
  20.         int recv_len;

  21.         wVersionRequested=MAKEWORD(1,1);

  22.         err=WSAStartup(wVersionRequested,&wsaData);
  23.         if(err != 0) return 0;

  24.         //判断是不是请求的版本
  25.         if(LOBYTE(wsaData.wVersion) !=1 || HIBYTE(wsaData.wVersion) !=1)
  26.         {
  27.                 WSACleanup();
  28.                 return 0;
  29.         }

  30.         //创建用于监听的套接字
  31.         SeverListenSocket=socket(AF_INET,SOCK_STREAM,0);

  32.         SOCKADDR_IN addrSrv;
  33.         addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//任意可用的IP地址
  34.         addrSrv.sin_family=AF_INET;//IPv4
  35.         addrSrv.sin_port=htons(6000);//监听的端口号
  36.         //bind
  37.         bind(SeverListenSocket,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
  38.        
  39.         while (1)
  40.         {
  41.                 printf("等待客户端连接\n");
  42.                 listen(SeverListenSocket,5);

  43.                 SOCKADDR_IN addrClient;
  44.                 int len=sizeof(SOCKADDR);
  45.                 //接受一个连接
  46.                 ConnetSocketInfo.ConnetedSocket=accept(SeverListenSocket,(SOCKADDR*)&ConnetSocketInfo.addrClient,&len);
  47.                 CreateThread(NULL,0,SeverThread,&ConnetSocketInfo,0,NULL);
  48.                
  49.                 Sleep(100);
  50.         }

  51.         return 0;
  52. }

  53. DWORD WINAPI SeverThread(LPVOID lpParamter)
  54. {
  55.         struct        ConnetInfo ConnetSocketInfo;
  56.         UINT8 RecvBuf[100];
  57.         int len=0;
  58.         printf("进入\n");
  59.         ConnetSocketInfo=*((struct ConnetInfo*)lpParamter);
  60.         //打印IP、端口信息
  61.         printf("IP:%d.%d.%d.%d\n",
  62.                 ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b1,
  63.                 ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b2,
  64.                 ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b3,
  65.                 ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b4);
  66.         printf("端口:%d\n",ntohs(ConnetSocketInfo.addrClient.sin_port));
  67.         send(ConnetSocketInfo.ConnetedSocket,"123456",6,0);
  68.         while (1)
  69.         {
  70.                 len=recv(ConnetSocketInfo.ConnetedSocket,(char *)RecvBuf,sizeof(RecvBuf),0);
  71.                 if(len<=0)
  72.                 {
  73.                         printf("产生错误或客户端关闭\n");
  74.                         break;
  75.                 }
  76.                 //Sleep(200);
  77.         }
  78.         closesocket(ConnetSocketInfo.ConnetedSocket);
  79.         printf("结束本线程\n");
  80.         return 0;
  81. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入8汤圆

 楼主| 发表于 2012-6-21 08:31:35 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

 楼主| 发表于 2012-6-21 08:36:13 | 显示全部楼层
发现过了一段时间后有可以连接了,有点奇怪。
可能是不够了解WinSocket原理吧

出0入0汤圆

发表于 2012-6-21 11:12:41 | 显示全部楼层
在bind或者listen之前,设置socket的reuse属性为true即可
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 01:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表