Socket服务端,启动Socket和监听客户端的连接
在StdAfx.h中添加 #include <afxsock.h>
在界面Dlg.cpp中添加#include <winsock2.h>
还有添加#pragma comment(lib, "WS2_32.lib")
SOCKET sock;
创建成全局变量
打开网络连接
WSADATA wsaData;
WORD version = MAKEWORD(2, 2);
int ret = WSAStartup(version, &wsaData);
if (ret != 0)
{
MessageBox(_T("初始化失败"));
return false;
}
比较简单的初始化Socket的方式:
bool C线程Dlg::InitSocket()
{
WSADATA wsaData;
WORD version = MAKEWORD(2, 2);
int ret = WSAStartup(version, &wsaData);
if (ret != 0)
{
MessageBox(_T("初始化失败"));
return false;
}
m_socket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == m_socket)
{
MessageBox(_T("套接字创建失败"), _T("警告"));
return false;
}
SOCKADDR_IN addrSock;
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(12345);
addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
int retval;
retval = bind(m_socket, (SOCKADDR*)&addrSock, sizeof(SOCKADDR));
if (SOCKET_ERROR == retval)
{
closesocket(m_socket);
MessageBox(_T("套接字绑定失败"), _T("警告"));
return false;
}
return true;
}
监听等操作(整合到线程里面):
if (listen(m_socket, 5) == SOCKET_ERROR)//监听客户端,如果是基于UDP的,则不需要listen
{
MessageBox(_T("开启监听失败"), _T("警告"));
return;
}
MessageBox(_T("开始监听"), _T("通知"));
//监听通过
SOCKADDR_IN addrFrom;
int len = sizeof(SOCKADDR);
SOCKET ConnectSocket = accept(m_socket, (sockaddr*)&addrFrom, &len); //得到客户端的IP地址。
char recvBuf[200] = { 0 };//获取客户端发送的消息
int retval = recv(ConnectSocket, recvBuf, 200, 0);
if (SOCKET_ERROR == retval)
return;