【编程笔记】Windows套接字使用总结

想到什么加什么…

  • 头文件及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));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值