socket

该博客演示了如何使用Winsock库在C++中建立TCP连接,并从服务器接收数据。通过`connect()`、`recv()`函数接收数据包,然后解析并打印数据。
摘要由CSDN通过智能技术生成
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <string.h>
#include <windows.h>   
#include "define.h"   
#pragma comment( lib, "ws2_32.lib"  )
#define SERVER_PORT 1234 //侦听端口

DWORD WINAPI Threadfunc(Handle Thread)
{

}

void shownum(int length,int number,tagPrinterData buffer[])
{
	for(int i=0;i<number*length;i++)
	{   

		printf("x=%d, y=%d, z=%d\n",buffer[i].XAxis,buffer[i].YAxis,buffer[i].ZAxis);
	}
}

void main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int ret;
	SOCKET sClient; //连接套接字
	struct sockaddr_in saServer; //地址信息
	char *ptr;
	BOOL fSuccess = TRUE;
	//WinSock初始化
	wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
	ret = WSAStartup(wVersionRequested, &wsaData);
	if(ret!=0)
	{
		printf("WSAStartup() failed!\n");
		return;
	}
	//确认WinSock DLL支持版本2.2
	if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
	{
		WSACleanup();
		printf("Invalid WinSock version!\n");
		return;
	}
	//创建Socket,使用TCP协议
	sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (sClient == INVALID_SOCKET)
	{
		WSACleanup();
		printf("socket() failed!\n");
		return;
	}
	//构建服务器地址信息
	saServer.sin_family = AF_INET; //地址家族
	saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序
	saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.4");
	//连接服务器
	ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
	if (ret == SOCKET_ERROR)
	{
		printf("connect() failed!\n");
		closesocket(sClient); //关闭套接字
		WSACleanup();
		return;
	}

	tagPackage packRecv;
	//  ptr = (char *)&packRecv;

	int m=1;
	
	while(1)
	{

		memset(&packRecv, 0, sizeof(packRecv)); 
		recv(sClient,(char *)&packRecv,sizeof(packRecv),0);
		int len=packRecv.pckHeader.dwLength;
		int num=packRecv.pckHeader.dwPackNum;
		tagPrinterData buf[100];
		memcpy(buf,(void*)packRecv.pckBody.dwBody,sizeof(tagPrinterData)*len);  //first packege
		for(int j=1;j<num;j++)    //2nd,3rd,4th,...
		{
			 recv(sClient,(char *)&packRecv,sizeof(packRecv),0);
			for(int i=0;i<len;i++)
			{
				//tagPrinterData printerdata;
				//int size=sizeof(printerdata);
				//memcpy(&printerdata,&packRecv.pckBody.dwBody[i*size],size);
				memcpy(buf,&packRecv.pckBody.dwBody,sizeof(tagPrinterData)*len);
				//buf[i+j*len].XAxis=printerdata.XAxis;
				//buf[i+j*len].YAxis=printerdata.YAxis;
				//buf[i+j*len].ZAxis=printerdata.ZAxis;
				// printf("x=%d, y=%d, z=%d\n",printerdata.XAxis,printerdata.YAxis,printerdata.ZAxis);

			}
			// printf("length:%d\n",packRecv.pckHeader.dwLength);

          // recv(sClient,(char *)&packRecv,sizeof(packRecv),0);
		}
		printf("task : %d \n",m);
		shownum(len,num,buf);
		m++;
	}


	if (ret == SOCKET_ERROR)
	{
		printf("send() failed!\n");
	}
	else
		printf("client info has been sent!");
	closesocket(sClient); //关闭套接字
	WSACleanup();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值