64,637
社区成员
发帖
与我相关
我的任务
分享
//CClientConn.cpp TCP/IP方式
//创建Socket
BOOL CClientConn::Create()
{
m_socket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == m_socket)
{
AfxMessageBox(L"创建失败!");
return FALSE;
}
socket1 = m_socket;//socket1是一个全局变量,用于保存创建的socket
SOCKET *pSocket = &m_socket;
//创建一个接收数据的线程,参数传入已创建的Socket
m_hRecvThread = CreateThread(NULL, 0, RecvThreadProc, (LPVOID)pSocket, 0, NULL);
if (m_hRecvThread)
{
CloseHandle(m_hRecvThread);
}
return TRUE;
}
//连接
BOOL CClientConn::Connect()
{
SOCKADDR_IN address;
int len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(60000);
address.sin_addr.S_un.S_addr = inet_addr("192.168.1.106");//本地IP
int n = connect(m_socket, (SOCKADDR *)&address, len);
if (SOCKET_ERROR == n)
{
AfxMessageBox(L"连接失败");
closesocket(m_socket);
return FALSE;
}
return TRUE;
}
//接收线程
DWORD CClientConn::RecvThreadProc(LPVOID lpParameter)
{
SOCKET *pSocket= (SOCKET *)lpParameter;//将传递进来的参数转换
while (TRUE)
{
char recvBuf[100];
memset(recvBuf, 0, sizeof(recvBuf));
int result = recv(*pSocket/*socket1*/, recvBuf, sizeof(recvBuf), 0);
//问题就出在这里,如果用全局变量socket1就没有问题,
//但是用我传进来的pSocket就不行,一直都是SOCKET_ERROR,不知道什么原因。
TRACE(L"%s\n", CString(recvBuf));
if (SOCKET_ERROR == result)
{
//int err = WSAGetLastError();
AfxMessageBox(L"接收失败");
return FALSE;
}
else if(result > 0)
{
//转宽字符
//1.确定转换为Unicode需要多少缓冲区(返回值也包含了最后一个NULL字符)。
int nLen = MultiByteToWideChar(CP_ACP, 0, recvBuf, -1, NULL, 0);
//2.定义一个临时变量,分配内存
WCHAR *tempBuf = new WCHAR[nLen];
//3.转换
MultiByteToWideChar(CP_ACP, 0, recvBuf, -1, tempBuf, nLen);
//给CString赋值
CString string = tempBuf;
if (tempBuf)
{
delete []tempBuf;
tempBuf = NULL;
}
AfxMessageBox(string);
}
else if (result == 0)
{
AfxMessageBox(L"连接已断开");
break;
}
}
return 0;
}
//参数传错了,*pSocket才是等同于m_socket;
m_hRecvThread = CreateThread(NULL, 0, RecvThreadProc, (LPVOID)*pSocket, 0, NULL);
SOCKET *pSocket = new SOCKET;
*pSocket = m_socket;
//创建一个接收数据的线程,参数传入已创建的Socket
m_hRecvThread = CreateThread(NULL, 0, RecvThreadProc, (LPVOID)pSocket, 0, NULL);
SOCKET socket1;
//全局变量是这么定义的