1 TCP通信之客户端 —— 学习总结
WSADATA wsaData = { 0 };
if( 0 != WSAStartup(MAKEWORD(2, 2), &wsaData) )//WSAStartup必须是应用程序或DLL调用的第一个windows sockets函数
{
OutputDebugString(_T("socket初始化失败\n"));
return FALSE;
return FALSE;
}
SOCKET m_ClientSocket;
SOCKET m_ClientSocket;
m_ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //TCP 通信
int nPort = 10103;
CString strIP = _T("172.16.0.1");
sockaddr_in saServer;
CString strIP = _T("172.16.0.1");
sockaddr_in saServer;
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(nPort); //htons转化为网络字节序
saServer.sin_addr.S_un.S_addr = inet_addr(CT2A(strIP)); //CT2A:将CString转换为char*
connect(m_ClientSocket, (SOCKADDR*)&saServer, sizeof(saServer)); //链接,省略判断是否连接成功
while(1)
{
char szBuf[256] = { 0 }; //接收
if(SOCKET_ERROR == recv(m_ClientSocket, szBuf, 250, 0)) //如果接收出错
{
closesocket(m_ClientSocket);
m_ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //重新进行连接操作
nPort = 10103;
strIP = _T("172.16.0.1");
saServer.sin_family = AF_INET;
saServer.sin_port = htons(nPort);
saServer.sin_addr.S_un.S_addr = inet_addr(CT2A(strIP));
connect(m_ClientSocket, (SOCKADDR*)&saServer, sizeof(saServer));
{
char szBuf[256] = { 0 }; //接收
if(SOCKET_ERROR == recv(m_ClientSocket, szBuf, 250, 0)) //如果接收出错
{
closesocket(m_ClientSocket);
m_ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //重新进行连接操作
nPort = 10103;
strIP = _T("172.16.0.1");
saServer.sin_family = AF_INET;
saServer.sin_port = htons(nPort);
saServer.sin_addr.S_un.S_addr = inet_addr(CT2A(strIP));
connect(m_ClientSocket, (SOCKADDR*)&saServer, sizeof(saServer));
}
}
}
//发送数据操作
if(SOCKET_ERROR == send(m_ClientSocket, (const char*)strText.GetBuffer(), strText.GetLength()*sizeof(TCHAR), 0))
//客户端相关代码点击链接——当服务器断了下次打开重新连接。
if(SOCKET_ERROR == send(m_ClientSocket, (const char*)strText.GetBuffer(), strText.GetLength()*sizeof(TCHAR), 0))
//客户端相关代码点击链接——当服务器断了下次打开重新连接。
https://download.youkuaiyun.com/download/dgxxyh/10297104