是服务器端呢?还是客户端?WINSOCK编程要先考虑好通信的目的,然后是通信的内容,确定需要的方式,是否该使用C/S结构。
解决方案 »
- 即有 dll 的 C/C++ 封装, 生成导入库问题, 使用 def 文件, 需要 linker loader 都满意.
- listctrl 中如何将某一行彩色显示??
- get_length不能得到框架的个数(已经把csdn上相关帖子都看了,还是不能解决)
- 跪求:Network Programming for Microsoft Windows 代码!
- TreeCtrl图标显示的问题
- 如何在全局函数中访问一个类的成员?
- 在VC里面如何能查看全局变量的当前值?
- 如何实现对工具条的定制?MSDN说,可以的!
- 获取atl word文档当前页内容
- 关于enter键处理的问题
- 您的回答,是对我的最大的支持,谢谢!!!
- 请问如何用Win32的Crypt实现Unix下加密密码的算法?
int nTotalRecv,nTotalSend,nTemp;
u_long ulOpt=0;
SOCKET hSocket=NULL;
SOCKADDR_IN sockServerAddr;
SOCKADDR_IN sockClientAddr;
ZeroMemory(&sockServerAddr,sizeof(SOCKADDR_IN));
ZeroMemory(&sockClientAddr,sizeof(SOCKADDR_IN));
ZeroMemory(&struResponseInfo,sizeof(tagServerResponseInfo));
sockServerAddr.sin_family=AF_INET;
sockServerAddr.sin_addr.s_addr=inet_addr(strServerIP);
sockServerAddr.sin_port=htons(SOCKET_PORT);
sockClientAddr.sin_family=AF_INET;
sockClientAddr.sin_port=htons(0);
sockClientAddr.sin_addr.s_addr=htonl(INADDR_ANY);
try
{
hSocket=socket(AF_INET,SOCK_STREAM,0);
if(hSocket==INVALID_SOCKET)
{
throw(EXCEPTION_CREATE_SOCKET);
}
if(ioctlsocket(hSocket,FIONBIO,&ulOpt)==SOCKET_ERROR)
{
throw(EXCEPTION_SET_SOCKET);
}
if(bind(hSocket,(PSOCKADDR)&sockClientAddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
throw(EXCEPTION_BIND_SOCKET);
}
if(connect(hSocket,(PSOCKADDR)&sockServerAddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
throw(EXCEPTION_CONNECT_SERVER);
}
nTotalSend=0;
nTotalRecv=0;
while(nTotalSend<sizeof(struValidInfo))
{
nTemp=send(hSocket,(char *)(&struValidInfo)+nTotalSend,
sizeof(struValidInfo)-nTotalSend,0);
if(nTemp==SOCKET_ERROR)
{
throw(EXCEPTION_SEND_DATA);
}
nTotalSend+=nTemp;
}
(注意:因为本人比较懒,所以服务端采用的是CSocket+API,连入请求用CSocket,数据传输用API,好像有些怪异,呵呵~~)
void CReportFormServerDlg::OnSockAccept(int nErrorCode,CSocketEx *pSock)
{
tagSocketThreadParam *pParam=NULL;
u_long ulOpt=0;
BOOL bFlag=TRUE;
CSocketEx *pAgent=NULL;
if(nErrorCode)
{
CString strTemp;
strTemp.Format("当接收连接请求时发生%08x错误",nErrorCode);
WriteLog(strTemp);
return;
}
pAgent=new CSocketEx;
if(pSock->Accept(*pAgent)==FALSE)
{
WriteError("当接收连接请求时");
return;
}
pParam=new tagSocketThreadParam;
pParam->pDlg=this;
pParam->pSock=pAgent;
pAgent->AsyncSelect(0);
pAgent->IOCtl(FIONBIO,&ulOpt);
pAgent->SetSockOpt(SO_KEEPALIVE,&bFlag,sizeof(BOOL));
pAgent->AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
AfxBeginThread(ThreadValidate,pParam);
}