我正在尝试实现一个C#Web套接字服务器,但它给了我一些麻烦.我正在运行一个Web服务器(ASP.NET)来托管带有javascript的页面,而Web套接字服务器则是作为C#控制台应用程序实现的.
我能够检测来自客户端的连接尝试(运行javascript的chrome)以及从客户端检索握手.但是客户端似乎不接受我发回的握手(onopenWeb套接字上的函数永远不会被调用).
我一直在阅读The Web Socket协议,我看不出我做错了什么.下面是一些服务器代码:
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8181);
listener.Bind(ep);
listener.Listen(100);
Console.WriteLine("Wainting for connection...");
Socket socketForClient = listener.Accept();
if (socketForClient.Connected)
{
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
//read handshake from client:
Console.WriteLine("HANDSHAKING...");
char[] shake = new char[255];
streamReader.Read(shake, 0, 255);
string handshake =
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
"Upgrade: WebSocket\r\n" +
"Connection: Upgrade\r\n" + …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个C#Websocket服务器,但我似乎并没有让它工作.我现在有一台接受TCPClient的服务器,从客户端接收HTTP请求并尝试发回HTTP响应,以便完成HTML5 WebSocket握手.
我相信服务器发送给客户端的握手有问题.我阅读了草案(Websocket 76草案),其中指出在握手结束时必须给出给出的两个键的响应.此响应由服务器计算.
这是我的代码:
static void Main(string[] args)
{
int port = 8181;
IPAddress localAddr = IPAddress.Loopback;
TcpListener server = new TcpListener(localAddr, port);
server.Start();
// Buffer for reading data
Byte[] receivedBytes = new Byte[256];
String data = null;
// Enter the listening loop.
while (true)
{
Console.WriteLine("Waiting for a connection...");
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!\n");
data = null;
// Get a stream …Run Code Online (Sandbox Code Playgroud) 我们需要从服务器端从.Net(C#)应用程序推送数据层,触发事件等。
Google跟踪代码管理器具有JavaScript,Android和iOS SDK。它还具有REST API,但是此API仅允许管理容器,标签和事件,而不能跟踪它们。
那么有可能对GTM实施服务器端跟踪吗?似乎应该是因为存在用于移动设备的SDK,并且应该没有太大区别。
如果可能的话,请告诉我们如何并且可能存在针对该API的API或针对.Net的SDK已经存在或计划在将来进行。也许我们必须将数据直接推送到Google Analytics(分析)和其他端点?如我所见,JavaScript SDK将数据直接从页面推送到GA。
c# asp.net-mvc google-analytics asp.net-web-api google-tag-manager
我是Windows服务开发的新手,需要在C#中构建一个将在端口上侦听8080数据的数据,然后解析它.我发现有关的信息System.Net.WebSockets,System.Net.Sockets以及第三方库,如SuperSocket.有这个例子,但不确定我的Windows服务类的方法OnStart()和内容是什么OnStop().另一个例子是在这里,但是这也不能覆盖Windows服务明确.对于基本的Windows服务开发,有这篇MSDN文章.
我在想这个OnStart():
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
serverSocket.Listen(128);
serverSocket.BeginAccept(null, 0, OnAccept, null);
Run Code Online (Sandbox Code Playgroud)
我会把什么投入OnStop()?
进入的数据流不需要任何身份验证.我还需要握手吗?
非常感谢您的帮助.
我是 Websockets 的新手,正在寻找使用 WS 和 c# 控制台应用程序的工作示例。我遇到了这个,但我已经遇到了问题。当服务器向客户端发送消息时,连接似乎已关闭。我不确定,但我认为握手没问题。这是一个代码:
服务器:
using System;
using System.Net.Sockets;
using System.Net;
using System.Security.Cryptography;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
static private string guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
static void Main(string[] args)
{
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
serverSocket.Listen(128);
serverSocket.BeginAccept(null, 0, OnAccept, null);
Console.Read();
}
private static void OnAccept(IAsyncResult result)
{
byte[] buffer = new byte[1024];
try
{
Socket client = null;
string headerResponse = "";
if (serverSocket != null …Run Code Online (Sandbox Code Playgroud)