想到什么加什么…
- 头文件及lib引用
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
- 初始化socket库
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) == 0) //0代表初始化成功
{
WSACleanup();
}
- 套接字的创建
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (SOCKET_ERROR != sock)
{
closesocket(sock);
}
- 套接字的使用
//服务端的创建
SOCKADDR_IN saServerAddress;
saServerAddress.sin_family = AF_INET;
saServerAddress.sin_addr.s_addr = INADDR_ANY; //inet_addr("192.168.1.2")
saServerAddress.sin_port = htons(8888);
do
{
// 建立套接口
SOCKET iServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if( INVALID_SOCKET==iServerSocket )
{
break;
}
if(bind(iServerSocket, (SOCKADDR *)&saServerAddress, sizeof(saServerAddress))==SOCKET_ERROR)
{
CancelIo((HANDLE)iServerSocket);
closesocket( iServerSocket );
iServerSocket = INVALID_SOCKET;
break;
}
// 建立连接:侦听
if(listen(iServerSocket, 64)==SOCKET_ERROR)
{
CancelIo((HANDLE)iServerSocket);
closesocket( iServerSocket );
iServerSocket = INVALID_SOCKET;
break;
}
}while( FALSE );
//客户端的创建
SOCKADDR_IN siServerAddr;
siServerAddr.sin_family = AF_INET;
siServerAddr.sin_port = htons(8888);
siServerAddr.sin_addr.s_addr = inet_addr("192.168.1.2");
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
异常判断...
if (SOCKET_ERROR != connect(sock, (PSOCKADDR)&siServerAddr, sizeof(siServerAddr)))
{
//获取此socket使用的IP地址
SOCKADDR_IN siClientAddr;
int iLen = sizeof(SOCKADDR_IN);
memset(&siClientAddr, 0, iLen);
char szClientIP[30] = {0};
int iRet = getsockname(sock, (PSOCKADDR)&siClientAddr, &iLen);
if (0 == iRet)
{
strcpy_s(szClientIP, inet_ntoa(siClientAddr.sin_addr));
printf("Client Sock IP:%s PORT:%d\n", szClientIP, ntohs(siClientAddr.sin_port));
}
}
closesocket( sock );
//设置超时时间
struct timeval timeo = {3, 0};
int iLen = sizeof(timeo);
//设置超时时间3s
setsockopt(iSocket, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeo, iLen);
//域名解析
LPHOSTENT lpHost = gethostbyname(v_szServerIp);
siServerAddr.sin_addr.s_addr = *((u_long FAR *)(lpHost->h_addr));