C#客户端向服务端(vc做的)做Get请求,但vc这总是accept两个请求

妙笔花生 2017-06-16 03:36:10
自己做了一个C++Http服务器,处理http的get请求。
客户端是C#做的。现在的情况是C#发起一个请求,C++中都能accept到两个连接。这是为什么呢?有懂C++和C#和网络编程的吗
http服务端代码
do 
{

//初始化WSA
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wsaData;
cResult.iResult = WSAStartup(sockVersion, &wsaData);
if (cResult.iResult)
{
cResult.strErr = "WSAStartup失败";
break;
}
//创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (slisten == INVALID_SOCKET)
{
cResult.iResult = -1;
cResult.strErr = "创建套接字失败";
break;
}

//绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET;
int iPort = g_cfgManger.GetListenPort();
if (iPort < 0){
cResult.iResult = -1;
cResult.strErr = "端口号不合法";
break;
}
sin.sin_port = htons(iPort);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
cResult.iResult = -1;
cResult.strErr = "绑定IP和端口失败";
break;
}
//开始监听
if (listen(slisten, 1) == SOCKET_ERROR)
{
cResult.iResult = -1;
cResult.strErr = "监听出错";
break;
}
//循环接收数据
SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[255];
int iCntText = 0;
while (true)
{
iCntText++;
printf("监听中\n");
sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if (sClient == INVALID_SOCKET)
{
//printf("accept error !");
printf("监听到错误socket");
continue;
}

//printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));//会报错 error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings d:\linhs\项目\多线程接收文件服务\myhttpserver\myhttpserver\myhttpserver.cpp 115 1 MyHttpserver
printf("接受第%d个连接:%s \r\n",iCntText, inet_ntoa(remoteAddr.sin_addr));
char acBuf[1024] = { 0 };
recv(sClient, acBuf, 1024, NULL);
DWORD dwThreadId;
newCnctThdParam * cnctParam = new newCnctThdParam;
cnctParam->OneSocket = sClient;
cnctParam->strRecvData = acBuf;
cnctParam->pClass = this;
CreateThread(NULL, NULL, NewConnectThread, cnctParam, NULL, &dwThreadId);

}

closesocket(slisten);
WSACleanup();
} while (0);


C#中的http请求代码
                string Url = "http://127.0.0.1/AskforTransport?fileSize=1111";
//string Url = "http://www.ltaaa.com/";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
request.KeepAlive = false;
HttpWebResponse response ;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
...全文
339 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hurryboylqs 2017-06-18
  • 打赏
  • 举报
回复
多少个连接要看C#内部是怎么实现的,这其实与你服务端无关,它来请求什么你就回应什么就行了,先解析请求行,找出请求方法。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧