求tcp/ip协议用vc++写的server端的多连接原程序(不要api写的,因为我不懂) up 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 www.codeproject.com有一个关于FTP服务端的源程序。 方法如下://声明:(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; } 请问在VC中如何改变编辑框的背景颜色 如果函数间传递很长的字符串,是传地址比较好吗? 无DLL注入问题 修改一条注册数据源的字符串 100送上 MFC建的DIALOG怎么实现文件拖放 MsComm控件使用问题 我以前没学过 UML,现在直接以<统一软件开发过程>来学习 UML 是否可以 ? 高手莫笑。能否在已运行的应用程序的窗口中,通过外挂加入按钮或者菜单? 关于SDK键盘与按钮操作的问题????? 怎样取得远程 nt/2000 主机的用户名列表? 线程用在 串口通讯中 的一个问题,请教高手! 关于RAS
//声明:(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;
}