SOCKET_ERROR & INVALID_SOCKET & WSAGetLastError

SOCKET_ERROR

http://www.cnblogs.com/onroad/archive/2009/08/10/1543164.html


INVALID_SOCKET

INVALID_SOCKET的值不是-1,原因参考basetsd.hWinSock2.h

 

typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;

typedef UINT_PTR        SOCKET;

#define INVALID_SOCKET  (SOCKET)(~0)

 

(~0)的值为-1;

(SOCKET)(~0)的值为:十六进制0xFFFFFFFF(十进制4294967295)。



WSAGetLastError()

http://baike.baidu.com/link?url=SsTlzJ16os_qifhAfsEaQabL5X_AJqtvrs-HRizK_jX4T2_-Q9TwFD_tXuhuhlPU

#include <winsock2.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; SOCKET ConnectSocket = INVALID_SOCKET; struct sockaddr_in serverAddress; char sendBuffer[1024]; char recvBuffer[1024]; const char* ipString = "172.16.10.242"; unsigned long ipAddress; int result = inet_pton(AF_INET, ipString, &ipAddress); if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to initialize WSA.\n"); return -1; } // 创建套接字 ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ConnectSocket == INVALID_SOCKET) { printf("Error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return -1; } serverAddress.sin_family = AF_INET; serverAddress.sin_addr.s_addr = ipAddress; serverAddress.sin_port = htons(8000); if (connect(ConnectSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) { printf("Failed to connect: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return -1; } snprintf(sendBuffer,10, "GCODE_COMMAND\r\n"); int iResult = send(ConnectSocket, sendBuffer, strlen(sendBuffer), 0); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return -1; } ZeroMemory(recvBuffer, sizeof(recvBuffer)); iResult = recv(ConnectSocket, recvBuffer, sizeof(recvBuffer) - 1, 0); if (iResult > 0) { recvBuffer[iResult] = '\0'; printf("Bytes received: %s\n", recvBuffer); } else if (iResult == 0) { printf("Connection closed by the remote host.\n"); } else { printf("recv failed with error: %d\n", WSAGetLastError()); } closesocket(ConnectSocket); WSACleanup(); return 0; }为什么recv fail with error: 10054
最新发布
03-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值