|
连接能正常,但是但连接断开后再次连接时,调式工具提示“本地端口还没有完全释放”,关闭socket不就是调用closesocket()就可以了吗??- #include <stdafx.h>
- #include "Sever.h"
- #include <stdio.h>
- struct ConnetInfo
- {
- SOCKET ConnetedSocket;
- SOCKADDR_IN addrClient;
- };
- SOCKET SeverListenSocket;
- SOCKET ConnetSocket;
- UINT16 test=123;
- struct ConnetInfo ConnetSocketInfo;
- DWORD WINAPI SeverListenThread(LPVOID lpParamter)
- {
- printf("进入监听线程\r\n");
- //加载套接字库
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- int recv_len;
- wVersionRequested=MAKEWORD(1,1);
- err=WSAStartup(wVersionRequested,&wsaData);
- if(err != 0) return 0;
- //判断是不是请求的版本
- if(LOBYTE(wsaData.wVersion) !=1 || HIBYTE(wsaData.wVersion) !=1)
- {
- WSACleanup();
- return 0;
- }
- //创建用于监听的套接字
- SeverListenSocket=socket(AF_INET,SOCK_STREAM,0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//任意可用的IP地址
- addrSrv.sin_family=AF_INET;//IPv4
- addrSrv.sin_port=htons(6000);//监听的端口号
- //bind
- bind(SeverListenSocket,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
-
- while (1)
- {
- printf("等待客户端连接\n");
- listen(SeverListenSocket,5);
- SOCKADDR_IN addrClient;
- int len=sizeof(SOCKADDR);
- //接受一个连接
- ConnetSocketInfo.ConnetedSocket=accept(SeverListenSocket,(SOCKADDR*)&ConnetSocketInfo.addrClient,&len);
- CreateThread(NULL,0,SeverThread,&ConnetSocketInfo,0,NULL);
-
- Sleep(100);
- }
- return 0;
- }
- DWORD WINAPI SeverThread(LPVOID lpParamter)
- {
- struct ConnetInfo ConnetSocketInfo;
- UINT8 RecvBuf[100];
- int len=0;
- printf("进入\n");
- ConnetSocketInfo=*((struct ConnetInfo*)lpParamter);
- //打印IP、端口信息
- printf("IP:%d.%d.%d.%d\n",
- ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b1,
- ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b2,
- ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b3,
- ConnetSocketInfo.addrClient.sin_addr.S_un.S_un_b.s_b4);
- printf("端口:%d\n",ntohs(ConnetSocketInfo.addrClient.sin_port));
- send(ConnetSocketInfo.ConnetedSocket,"123456",6,0);
- while (1)
- {
- len=recv(ConnetSocketInfo.ConnetedSocket,(char *)RecvBuf,sizeof(RecvBuf),0);
- if(len<=0)
- {
- printf("产生错误或客户端关闭\n");
- break;
- }
- //Sleep(200);
- }
- closesocket(ConnetSocketInfo.ConnetedSocket);
- printf("结束本线程\n");
- return 0;
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|