socket Clinent
分3步
第一步,连接服务器
void CclientDlg::OnClickedConnect()
{
// TODO: 在此添加控件通知处理程序代码
CString msg="";
if(ClientSocket != INVALID_SOCKET)//已经连接服务器,则断开服务器
{
::closesocket(ClientSocket);
::WSACleanup();
ClientSocket = INVALID_SOCKET;
Connect.SetWindowTextA("断开");
msg += "\r\n已断开!";
}
else//连接服务器
{
Connect.SetWindowTextA("连接");
if(aimport > 65535)
{
AfxMessageBox("端口溢出!请重新设定!");
return;
}
WSADATA data;
if(::WSAStartup(MAKEWORD(2, 2), &data))
{
AfxMessageBox("启动套接字失败!");
return;
}
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(aimport);
AimIP.GetAddress(addr.sin_addr.S_un.S_un_b.s_b1, addr.sin_addr.S_un.S_un_b.s_b2,
addr.sin_addr.S_un.S_un_b.s_b3, addr.sin_addr.S_un.S_un_b.s_b4);
ClientSocket = ::socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET == ClientSocket ||
::WSAAsyncSelect(ClientSocket, this->m_hWnd, WM_SOCKET, FD_CONNECT|FD_READ|FD_CLOSE) == SOCKET_ERROR)//连接
{
AfxMessageBox("连接失败!");
::WSACleanup();
ClientSocket = INVALID_SOCKET;
return;
}
::connect(ClientSocket, (sockaddr*)&addr, sizeof(addr));
SetTimer(1, 4000, NULL);
msg += "\r\n正在连接...";
}
MsgShow.SetWindowText(msg);
MsgShow.LineScroll(MsgShow.GetLineCount());
}
第二步,编写Onsocket函数
这个和服务器的差不多,上一篇有。
第3步,发送按钮
void CclientDlg::OnClickedSend()
{
// TODO: 在此添加控件通知处理程序代码
if(ClientSocket != INVALID_SOCKET)
{
char sendd[500] = {0};
MsgSend.GetWindowText(sendd, sizeof(sendd) - 1);
int strlength = strlen(sendd);
if(strlength < 1)
{
MessageBox("发送内容不能为空!");
return;
}
CString msg;
MsgShow.GetWindowText(msg);
if(::send(ClientSocket, sendd, strlength, 0) != SOCKET_ERROR)
{
msg += "\r\n本机: \r\n";
msg += sendd;
}
else
msg += "\r\n本机: 消息发送失败!";
MsgShow.SetWindowText(msg);
MsgShow.LineScroll(MsgShow.GetLineCount());
MsgSend.SetWindowTextA("");
}
}