Windows Socket 客户端

开发环境vs2005,开发语言vc++.net。

用vs2005编写程序员时,你要记得引入ws2_32.lib,否则会报LNK2019的错误!下面的程序是一个模拟了终端发报文给平台小程序,有兴趣的可以参考下。

// DemoTerminal.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <winsock.h>
#include <iostream>
#include <stdio.h>

#pragma comment(lib,"ws2_32.lib")

int SignInDataLen=148;

unsigned char SignInData[]={
		0x4C,0x52,0x49,0x00,0x1C,0x01,0x00,0x03,0x71,0x67,0x33,0x36,0x82,0x00,0x00,0x00,

		0x00,0x03,0x83,0x34,0x12,0x58,0x00,0x09,0x49,0x00,0x06,0x00,0x00,0x00,0x82,0x8F,

		0xD9,0x60,0x00,0x07,0x00,0x00,0x01,0x60,0x60,0x60,0x60,0x60,0x60,0x38,0x38,0x38,

		0x30,0x32,0x39,0x35,0x32,0x34,0x90,0x01,0x00,0x20,0x18,0x08,0x04,0x00,0xC0,0x04,

		0x01,0x00,0x00,0x00,0x13,0x46,0x51,0x20,0x13,0x08,0x07,0x01,0x81,0x00,0x10,0x13,

		0x05,0x15,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,

		0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x88,0x80,0x29,0x52,0x44,0x64,0x01,0x25,0x18,

		0x00,0x01,0x00,0x16,0x30,0x30,0x32,0x43,0x34,0x38,0x37,0x41,0x37,0x41,0x41,0x36,

		0x42,0x45,0x38,0x36,0x71,0x06,0xB0,0xD1,0xAB,0x81,0x6B,0x38,0x24,0x06,0xAF,0x4F,

		0x82,0xCA,0x61,0xA3
};

int ConsumeDataLen=200;

unsigned char ComsumeData[]={
		0x4C,0x52,0x49,0x00,0x1C,0x01,0x00,0x03,0x71,0x67,0x33,0x36,0x82,0x00,0x00,0x00,

		0x00,0x03,0x83,0x34,0x12,0x58,0x00,0x09,0x49,0x00,0x06,0x00,0x00,0x00,0x82,0x8F,

		0xD9,0x60,0x00,0x07,0x00,0x00,0x61,0x31,0x00,0x31,0x01,0x01,0x38,0x38,0x38,0x30,

		0x32,0x39,0x35,0x32,0x34,0x34,0x91,0x02,0x00,0x70,0x38,0x04,0xC0,0x30,0xC0,0x98,

		0x11,0x19,0x62,0x28,0x58,0x01,0x99,0x00,0x19,0x93,0x73,0x70,0x00,0x00,0x00,0x00,

		0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x21,0x13,0x50,0x33,0x08,0x07,0x02,0x10,0x00,

		0x12,0x37,0x62,0x28,0x58,0x01,0x99,0x00,0x19,0x93,0x73,0x7D,0x49,0x12,0x12,0x00,

		0x19,0x95,0x83,0x47,0x40,0x00,0x28,0x12,0x34,0x56,0x78,0x90,0x12,0x34,0x56,0x78,

		0x90,0x12,0x34,0x56,0x84,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x20,0x20,0x20,

		0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x31,0x35,0x36,0xAF,

		0xEA,0xD9,0x9A,0xCA,0x3E,0x6B,0x50,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

		0x14,0x22,0x00,0x00,0x01,0x00,0x05,0x01,0x4B,0xB2,0x72,0xDB,0xD9,0xA0,0x7C,0x89,

		0x48,0x55,0x47,0xBD,0x9E,0xB2,0x1E,0x3C
};

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsaData;
	SOCKET s;
	SOCKADDR_IN ServerAddr;
	int port=10987;
	char *IP="10.0.66.231";

	WSAStartup(MAKEWORD(2,2),&wsaData);
	s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

	ServerAddr.sin_family=AF_INET;
	ServerAddr.sin_port=htons(port);
	ServerAddr.sin_addr.S_un.S_addr=inet_addr(IP);

	if(connect(s,(SOCKADDR *)&ServerAddr,sizeof(ServerAddr))!=0)
	{
		printf("Connect to server failed!\n");
		return 0;
	}

	printf("Connect to server success!\n");
	printf("输入1签到,2消费,0退出\n");

	int n,len;
	scanf_s("%d",&n);

	while(n!=0)
	{
		if(n==1)
		{
			len=sendto(s,(const char *)SignInData,SignInDataLen,0,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));
			printf("发送了%d个字节\n",len);
		}
		if(n==2)
		{
			sendto(s,(const char *)ComsumeData,ConsumeDataLen,0,(SOCKADDR *)&ServerAddr,sizeof(ServerAddr));
			printf("发送消费报文\n");
		}

		scanf_s("%d",&n);
	}

	system("pause");
	
	closesocket(s);
	WSACleanup();

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Windows socket客户代码示例,它连接到指定的服务器并发送一条消息,然后接收服务器的响应并打印出来: ```C++ #include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int main() { // 初始化Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { printf("WSAStartup failed with error: %d\n", iResult); return 1; } // 创建一个socket对象 SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientSocket == INVALID_SOCKET) { printf("socket failed with error: %ld\n", WSAGetLastError()); WSACleanup(); return 1; } // 定义服务器的地址和口号 sockaddr_in serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); serverAddress.sin_port = htons(8888); // 连接到服务器 iResult = connect(clientSocket, (SOCKADDR*)&serverAddress, sizeof(serverAddress)); if (iResult == SOCKET_ERROR) { printf("connect failed with error: %d\n", WSAGetLastError()); closesocket(clientSocket); WSACleanup(); return 1; } // 发送一条消息 const char* message = "Hello, server!"; iResult = send(clientSocket, message, strlen(message), 0); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(clientSocket); WSACleanup(); return 1; } // 接收服务器的响应 char response[1024]; iResult = recv(clientSocket, response, sizeof(response), 0); if (iResult > 0) { response[iResult] = '\0'; printf("Server response: %s\n", response); } else if (iResult == 0) { printf("Connection closed by server.\n"); } else { printf("recv failed with error: %d\n", WSAGetLastError()); } // 关闭socket连接 closesocket(clientSocket); WSACleanup(); return 0; } ``` 需要注意的是,这里的服务器地址和口号需要根据实际情况进行修改。同时,客户需要先连接到服务器,然后再发送消息和接收响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值