int CRevPlayWnd::Connect(HWND hwnd, const char *Addr, short Port, int &sock)
{
SOCKADDR_IN send_sin;
int status;
//创建一个socket
sock = socket(AF_INET,SOCK_STREAM,0);
if (sock == INVALID_SOCKET)
{
MessageBox("Socket Error");
closesocket(sock);
return -1;
}
else
{
send_sin.sin_family=AF_INET;
send_sin.sin_addr.s_addr=inet_addr(Addr);
send_sin.sin_port=htons(Port);
//设置响应的网络事件为FD_CONNECT,即建立连接
//发送WSA_CONNECT消息给窗口
status=WSAAsyncSelect(sock,hwnd,WSA_CONNECT,FD_CONNECT);
if(status<0)
{//连接建立失败,关闭socket
MessageBox("Error on WSAAsyncSelect()");
WSAAsyncSelect(sock, hwnd, 0, 0);
closesocket(sock);
return -1;
}
}
//连接发送端
connect(sock,(struct sockaddr FAR *)&send_sin, sizeof(send_sin));
int error=WSAGetLastError();
//有阻塞,弹出等待对话框
if (error==WSAEWOULDBLOCK)
WaitDlg.DoModal();
return 0;
}
int CRevPlayWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
int status;
int sock;
CConnectDlg ConnectDlg;
stWSABuf.buf = new char[BUFSIZE];
stWSABuf.len = BUFSIZE;
achInBuf = new BYTE [BUFSIZE*2];
if(ConnectDlg.DoModal()==IDOK)
{
status=Connect(m_hWnd,AddressIp,LISTEN_PORT,sock);
if(status<0)
return -1;
}
return 0;
}
上一篇:SWPU新生赛WriteUp
下一篇:redis常用命令