/// <summary> /// 接收消息 /// </summary> /// <param name="clientSocket"></param> private void ReceiveMessage(object clientSocket) { Socket myClientSocket = (Socket)clientSocket; while (true) { try { byte[] result = new byte[1024 * 1024 * 10]; //通过clientSocket接收数据 int receiveNumber = myClientSocket.Receive(result); if (receiveNumber > 0) { var content = Configs.Encoding.GetString(result); MessageReceiveEvent?.Invoke(content); } } catch (Exception ex) { Console.WriteLine(ex.Message); myClientSocket.Close(); break; } } }
public void SendBinaryMessageTest() { try { WebSocketServer.NewDataReceived -= new SessionHandler <WebSocketSession, byte[]>(WebSocketServer_NewDataReceived); var webSocketClient = CreateClient(Version); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10; i++) { sb.Append(Guid.NewGuid().ToString()); } string messageSource = sb.ToString(); Random rd = new Random(); for (int i = 0; i < 100; i++) { int startPos = rd.Next(0, messageSource.Length - 2); int endPos = rd.Next(startPos + 1, messageSource.Length - 1); string message = messageSource.Substring(startPos, endPos - startPos); var data = Encoding.UTF8.GetBytes("ECHO " + message); webSocketClient.Send(data, 0, data.Length); Console.WriteLine("Client:" + message); if (!MessageReceiveEvent.WaitOne(1000)) { Assert.Fail("Cannot get response in time!"); } Assert.AreEqual(message, CurrentMessage); } webSocketClient.Close(); if (!CloseEvent.WaitOne(1000)) { Assert.Fail("Failed to close session ontime"); } } catch (Exception e) { throw e; } finally { WebSocketServer.NewDataReceived += new SessionHandler <WebSocketSession, byte[]>(WebSocketServer_NewDataReceived); } }
public SClient( ) { IPAddress ip = IPAddress.Parse(Configs.IP); serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Connect(new IPEndPoint(ip, Configs.Port)); MessageReceiveEvent?.Invoke($"连接{serverSocket.LocalEndPoint.ToString()}成功"); receiveThread = new Thread(ReceiveMessage); receiveThread.IsBackground = true; receiveThread.Start(); }
public SServer() { IPAddress ip = IPAddress.Parse(Configs.IP); serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Bind(new IPEndPoint(ip, Configs.Port)); //绑定IP地址:端口 serverSocket.Listen(10); //设定最多10个排队连接请求 MessageReceiveEvent?.Invoke($"启动监听{serverSocket.LocalEndPoint.ToString()}成功"); //通过Clientsoket发送数据 myThread = new Thread(ListenClientConnect); myThread.IsBackground = true; myThread.Start(); }
private void VerifySendMessage(string message) { var websocket = CreateClient(); websocket.Send(message); if (!MessageReceiveEvent.WaitOne()) { Assert.Fail("Failed to receive message one time"); } Assert.AreEqual(message, CurrentMessage); websocket.Close(); }
public void SendMessageTest() { var webSocketClient = CreateClient(m_Version); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10; i++) { sb.Append(Guid.NewGuid().ToString()); } string messageSource = sb.ToString(); Random rd = new Random(); for (int i = 0; i < 100; i++) { int startPos = rd.Next(0, messageSource.Length - 2); int endPos = rd.Next(startPos + 1, messageSource.Length - 1); string message = messageSource.Substring(startPos, endPos - startPos); webSocketClient.Send("ECHO " + message); Console.WriteLine("Client:" + message); if (!MessageReceiveEvent.WaitOne(1000)) { Assert.Fail("Cannot get response in time!"); } Assert.AreEqual(message, CurrentMessage); } webSocketClient.Close(); if (!CloseEvent.WaitOne(1000)) { Assert.Fail("Failed to close session ontime"); } }
public void SendMessage(string cmd) { var enableClient = Clients.Where(x => x.Connected).ToList(); if (enableClient.Count() == 0) { MessageReceiveEvent?.Invoke("没有可用的客户端"); return; } for (int i = 0; i < enableClient.Count; i++) { try { if (enableClient[i].Connected) { enableClient[i].Send(Configs.Encoding.GetBytes(cmd)); } } catch (Exception) { } } }
/// <summary> /// 监听客户端连接 /// </summary> private void ListenClientConnect() { while (true) { try { Socket clientSocket = serverSocket.Accept(); if (!Clients.Contains(clientSocket)) { Clients.Add(clientSocket); } MessageReceiveEvent?.Invoke($"{clientSocket.RemoteEndPoint} Connected"); receiveThread = new Thread(ReceiveMessage); receiveThread.IsBackground = true; receiveThread.Start(clientSocket); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
/// <summary> /// Sets the event which gets called when a message is received /// </summary> /// <param name="pReceiveEvent">Delegate to the receive-message method</param> public void ReceiveMessageEvent(MessageReceiveEvent pReceiveEvent) { receiveMessageEvent = pReceiveEvent; }
private void OnNewMessageReceived(object sender, MessageReceiveEvent e) { _newEventReceived = JsonConvert.DeserializeObject <Event>(e.Message.Data); _updateRequired = true; }