关于网友提出的“ 求tcp/ip协议用vc++写的server端的多连接原程序(不要api写的,因为我不懂)”问题疑问,本网通过在网上对“ 求tcp/ip协议用vc++写的server端的多连接原程序(不要api写的,因为我不懂)”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 求tcp/ip协议用vc++写的server端的多连接原程序(不要api写的,因为我不懂)
描述: up
解决方案1: 方法如下:
//声明:(SvrDlg.h)
SOCKET msgsock[20];//允许同时连接20个客户
SOCKET sock;
sockaddr_in serv;
int nAddrLen;
//初始化socket:(SvrDlg.cpp)
for(int i = 0;i<20;i++)
{
msgsock[i] = NULL
|
//设定地址
serv.sin_addr.s_addr = htonl(INADDR_ANY);
serv.sin_family = AF_INET;
serv.sin_port = 5000;
nAddrLen = sizeof(serv);
//创建Socket
sock = socket(AF_INET,SOCK_STREAM,0);
//绑定
if(bind(sock,(sockaddr*)&serv,nAddrLen))
{
AfxMessageBox("1绑定错误");
return FALSE;
}
else
{
//AfxMessageBox("服务器创建成功");
//开始侦听
listen(sock,5);
//调用线程
AfxBeginThread(&thread,0);
}
//服务器接收线程
UINT thread(LPVOID p)
{
char buff[100];
CString strReceived;
CString command;
int s=1,loop=0,i;
CSvrDlg* pDlg = (CSvrDlg*)AfxGetApp()->GetMainWnd();
for (i = 0;i<20;i++)
{
if(pDlg->msgsock[i] == NULL)
{
loop = 1;//判断是否还有空缺
break;
}
}
if(loop)
{
s=1;
pDlg->msgsock[i] = accept(pDlg->sock,(sockaddr*)&(pDlg->serv),
&(pDlg->nAddrLen));//用空缺sock等待客户的连接;
if(pDlg->msgsock[i] == INVALID_SOCKET)
AfxMessageBox("Accept fail!");
else
{
AfxBeginThread(thread,0);//循环调用自己(这里是关键)
//循环接收数据
while(s != SOCKET_ERROR){ //s != SOCKET_ERROR
s=recv(pDlg->msgsock[i],buff,100,0);
if(s != SOCKET_ERROR)
{
//处理数据
}
}
//if error occur
//set Socket to NULL
pDlg->msgsock[i] = NULL;
closesocket(pDlg->msgsock[i]);
..................................
}
AfxEndThread(0);
return 0;
}
解决方案2: www.codeproject.com有一个关于FTP服务端的源程序。
以上介绍了“ 求tcp/ip协议用vc++写的server端的多连接原程序(不要api写的,因为我不懂)”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3193618.html