📄 d076.bmp.txt
字号:
public:
BOOL InitAndConnet(HWND hwnd, UINT port, CString m_strServer);
public:
void GetString(CString & str);
void SendString(CString a);
CString m_strServer;
SOCKET m_hSocket;
sockaddrjn m_addr;
UINT m_uPort;
HWND m_hWnd;
};
由于本例将CServer类和CClient类的声明和实现同时放在了文件ServerClient.h和
ServerClient.cpp中,所以CClient类的声明没必要引用文件winsock.h。
在类的声明中,m_strServer为服务器的IP地址格式构成的字符串,例如“202.197,66.93”;
m_hSocket为客户机类的Socket; m_addr为地址结构体变量;m_uPort为服务器的Socket的
端口号;m_hWnd为处理该Socket的窗口句柄。
与CServer类似,CClient类的构造函数将m_hSocket清空,而析构函数—CClient()则调
用WSAAsyncSelect0特InitAndListen()函数内调用该函数设置的几个Socket事件还原为阻塞
方式。详细代码见随书光盘“Chapter 3\Example 4\”。
CClient类与CServer类的处理类似,不同的在于没有调用accept()函数和listen()函数,
而是调用connect函数与服务器端的Socket进行连接。详见随书光盘“Chapter 3\Example 4\”
中的源码,请读者认真比较CClient类的InitAndConnet()函数和CServer类的InitAndConnet()
函数。主要不同的代码如下:
//准备服务器的信息,这里需要指定服务器的地址
m_addr.sin_family= AF_INET;
m_addr.sin_addr.S_un.S_addr= inet_addr(m_strServer.GetBuffer(0》;
m_addr.sin_port= htons(m_uPort); /,改变端口号的数据格式
//这里主动连接服务器,该过程将等待一定时间
int ret=0:
int error=0:
ret= connect(m_hSocket, (LPSOCKADDR)&m_addr, sheof(m_addr》;
if(ret==SOCKET_ERROR)
{,臆接失败
if(GetLastError()! =WS AEWOULDBLOCK)
{
AfxMessageBox(_T(”请确认服务器确实已经打开并工作在同样的端口!”));
retum FALSE;
}
)
(5)编写对话框类的函数
1)添加包含的头文件。在编写对话框的函数前,先定义一个线性表:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -