使用Socket方式调用HttpWebApi获取数据

背景:最近有一个需求,单片机需要调用服务端Api获取数据,因为一些原因单片机只能使用TCP方式;作为服务端开发人员提供Demo

代码如下(这里用C#语言演示)

using System.Text;
using System.Net.Sockets;

namespace ConsoleApp3
{
	internal class Program
	{
		static void Main(string[] args)
		{
			var host = "dev.iot.xxmytest.com";
			var port = 80;
            
			Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			socket.Connect(host, port);

			var body = Newtonsoft.Json.JsonConvert.SerializeObject(new Body { MachineCode = "TBX001" });

			StringBuilder postData = new StringBuilder();
			postData.Append("POST /Machines/Register/XXXF40B93D06E24AE5A060355CE6XXXX HTTP/1.1\r\n");
			postData.Append($"Host: {host}\r\n");
			postData.Append($"Content-Length: {body.Length}\r\n");
			postData.Append($"Content-Type: application/json\r\n");
			postData.Append("\r\n");
			postData.Append(body);
			postData.Append("\r\n");

			Console.WriteLine("开始发送消息");
			byte[] message = Encoding.UTF8.GetBytes(postData.ToString());
			socket.Send(message);

			Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(message));
			byte[] receive = new byte[1024];
			int length = socket.Receive(receive);
			Console.WriteLine("接收消息为:" + Encoding.UTF8.GetString(receive));

			socket.Close();

			Console.ReadKey();
		}


		public class Body
		{
			public string? MachineCode { get; set; }
		}
	}
}

注意:拼接发送数据时Header部分和body部分一定要有换行分隔(如果没有body也要有换行分隔),否则服务器无法识别

控制台输入如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值