Win32中的socket通信

这是自己写的一个简单socket通信函数,作为客户端在c++中生产环境已经使用,哪里有问题还请大家指出,作为笔记会持续更新

#include <Winsock2.h>
#include <stdio.h>
#include <iostream>
#include <Winsock2.h> //windows socket的头文件
#pragma comment( lib, "WS2_32.lib" )// 链接Winsock2.h的静态库文件
using namespace std;
static int longth = 1024 * 1024 *2;//一次接受数据最大长度
char rec[1024 * 1024 *2 ];//分配2M内存,作为接受数据的最大容量,可根据自己的需求调整,尽量越小越好
//在此注意rec的数组长度和longth的值相等,不然接受数据会乱码错误

// 1.对socket数据接受的处理
char* Transport(byte *message)
{
	rec[0] = '\0';
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	const int BUFFER_SIZE = 512;
	wVersionRequested = MAKEWORD(1, 1);
	char *MESSAGE;

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0) {
		return "socket_flase";
	}
	if (LOBYTE(wsaData.wVersion) != 1 ||
		HIBYTE(wsaData.wVersion) != 1) {
		WSACleanup();
		return false;
	}
	SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建套接字(socket)。

	SOCKADDR_IN local;
	local.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	local.sin_family = AF_INET;
	local.sin_port = htons(8080);
	if (sockClient == INVALID_SOCKET) //判断soket是否创建成功
	{
		MessageBox(NULL, "连接服务器失败,请重试", TEXT("发送信息"), MB_ICONINFORMATION);
		return "pp";
	}
	if (connect(sockClient, (struct sockaddr *) &local, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)//判断链接是否成功
	{
		printf("连接失败\r\n");
		//btnconn->EnableWindow(TRUE);
		return "asd";
	}
	else
	{
		printf("连接成功\r\n");
	}
	int len = sizeof(SOCKADDR);
	//byte sendBuf[1024] = message;
	send(sockClient, (const char*)message, strlen((const char*)message), 0);
	char recvBuf[BUFFER_SIZE]="";
	//const char *ptr = recvBuf;
	int num = 0;
	//判断是否接收完整
	while (num = recv(sockClient, rec, longth, 0) >0)
	{
		//link_M(rec, recvBuf);
		//数据的拼接,最后的数据都在rec中
		if(recvBuf!=NULL)
			sprintf(rec, "%s%s", rec, recvBuf);
	}
	//MessageBox(NULL, rec, "", NULL);
	closesocket(sockClient);
	WSACleanup();
	return rec;
}

最后的接收函数有点问题更新一下:

	//判断是否接收完整
	while (num = recv(sockClient, (char*)recvBuf, sizeof(recvBuf)-1, 0)>0)
	{
		recvBuf[sizeof(recvBuf)-1] = '\0';
		sprintf(rec, "%s%s", rec, recvBuf);
		memset(recvBuf, 0, sizeof(recvBuf));
		recvBuf[0] = '\0';
	}

猜你喜欢

转载自blog.csdn.net/hu421160052/article/details/87262226