18,356
社区成员
发帖
与我相关
我的任务
分享
// cas.cpp 继承于CAsyncSocket
void cas::OnConnect(int nErrorCode)
{
// 未连网络时,大约20秒以后才到这儿
CAsyncSocket::OnConnect(nErrorCode);
}
// CdDlg.cpp 对话框按钮点击事件
void CdDlg::OnBnClickedOk()
{
AfxSocketInit(); // 初始化通讯
ca.Create(); // 建立通讯,ca 是 cas的实例
// 通过下面语句设置连接超时时间为750ms,实际不起作用,20秒以后才产生连接错误事件
int mytime = 750;
ca.SetSockOpt( SO_SNDTIMEO, &mytime, sizeof(mytime) );
ca.SetSockOpt( SO_RCVTIMEO, &mytime, sizeof(mytime) );
// 连接
ca.Connect(L"192.168.1.241", 9600);
}
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData)!=0) return -1;
//创建socket
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
if (s==INVALID_SOCKET) return -1;
//设置非阻塞
BOOL block=FALSE;
ioctlsocket(s,FIONBIO,(unsigned long *)&block);
//设置连接地址
SOCKADDR_IN addr;
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
addr.sin_port=htons(12345);
//设置等待时间
struct timeval tv;
tv.tv_sec=0;
tv.tv_usec=750;
struct fd_set wfs;
FD_ZERO(&wfs);
FD_SET(s,&wfs);
//连接
int len=sizeof(addr);
connect(s,(SOCKADDR*)&addr,len);
//等待连接结果
int ret=select(0,NULL,&wfs,NULL,&tv);
switch (ret)
{
case 0:
printf("time out\n");
break;
case SOCKET_ERROR:
printf("error\n");
break;
default:
printf("connected\n");
}
closesocket(s);
return 0;
}