⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obexlistenercontext.cs

📁 蓝牙传输控件,用于蓝牙文件上传和下载。芯片只要选用crs
💻 CS
字号:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using bluetoothX;

namespace bluetoothX
{
	public class ObexListenerContext
	{
		byte[] buffer;
			
		private Socket socket;
		private ObexListenerRequest request;
		private WebHeaderCollection headers = new WebHeaderCollection();
		private MemoryStream bodyStream = new MemoryStream();
		private EndPoint localEndPoint;
		private EndPoint remoteEndPoint;
		short remoteMaxPacket = 0;

		internal ObexListenerContext(Socket s)
		{
			buffer = new byte[0x2000];
			this.socket = s;

			this.localEndPoint = s.LocalEndPoint;
			this.remoteEndPoint = s.RemoteEndPoint;

			bool moretoreceive = true;			

			while(moretoreceive)
			{
				int received = 0;

				try
				{
					received = s.Receive(buffer,3,SocketFlags.None);
				}
				catch(SocketException se)
				{
					Console.Write(se.Message);
				}

				if(received == 3)
				{
					ObexMethod method = (ObexMethod)buffer[0];
					short len = (short)(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 1)) - 3);
					if(len > 0)
					{
                        int iPos = 0;

                        while (iPos < len)
                        {

                            int receivedBytes = s.Receive(this.buffer, iPos+3, s.Available, SocketFlags.None);

                            iPos += receivedBytes;
                        }
					}

					byte[] responsePacket = null;

					switch(method)
					{
						case ObexMethod.Get:
							ObexParser.ParseHeaders(buffer, ref remoteMaxPacket,  bodyStream, headers);
							responsePacket = new byte[3] {(byte)ObexStatusCode.MethodNotAllowed, 0x00, 0x03};
							break;
						case ObexMethod.Connect:
							ObexParser.ParseHeaders(buffer, ref remoteMaxPacket, bodyStream, headers);
							responsePacket = new byte[7] { 0xA0, 0x00, 0x07, 0x10, 0x00, 0x20, 0x00 };
							break;
						case ObexMethod.Put:
							ObexParser.ParseHeaders(buffer, ref remoteMaxPacket,  bodyStream, headers);
							responsePacket = new byte[3] {(byte)(ObexStatusCode.Continue | ObexStatusCode.Final), 0x00, 0x03};
							break;
						case ObexMethod.PutFinal:
							ObexParser.ParseHeaders(buffer, ref remoteMaxPacket,  bodyStream, headers);
                            				responsePacket = new byte[3] { (byte)(ObexStatusCode.OK | ObexStatusCode.Final), 0x00, 0x03 };
							break;
						case ObexMethod.Disconnect:
							ObexParser.ParseHeaders(buffer, ref remoteMaxPacket,  bodyStream, headers);
							responsePacket = new byte[3] {(byte)(ObexStatusCode.OK | ObexStatusCode.Final), 0x00, 0x03};
							moretoreceive = false;
							break;
						default:
							Console.WriteLine(method.ToString() + " " + received.ToString());
							break;
					}

					try
					{

						if(responsePacket!=null)
						{
							s.Send(responsePacket);
						}

					}
					catch(Exception se)
					{
						Console.WriteLine(se.Message);
					}
				}
				else
				{
					moretoreceive = false;
				}
			}

			s.Close();
			s = null;

			request = new ObexListenerRequest(bodyStream.ToArray(), headers, localEndPoint, remoteEndPoint);
		
		}

		public ObexListenerRequest Request
		{
			get
			{
				return request;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -