c# WebSocket 服务器与客户端通讯
1、下载WebScoket 服务器类库Fleck.dll 与客户端类库websocket-sharp.dll : https://pan.baidu.com/s/1o9jU22e
2、WebSocket 服务器代码:
1 List<IWebSocketConnection> allSockets; 2 public void Func() 3 { 4 try 5 { 6 FleckLog.Level = LogLevel.Debug; 7 allSockets = new List<IWebSocketConnection>(); 8 9 var server = new WebSocketServer("ws://0.0.0.0:9999"); 10 11 server.Start(socket => 12 { 13 socket.OnOpen = () => 14 { 15 allSockets.Add(socket); 16 }; 17 18 socket.OnClose = () => 19 { 20 21 allSockets.Remove(socket); 22 }; 23 24 socket.OnMessage = message => 25 { 26 //显示接收的客户端信息 27 txt_receive.Text += message + "\r\n"; 28 29 //发送信息给客户端 30 allSockets.ToList().ForEach(s => s.Send("test")); 31 32 }; 33 }); 34 } 35 36 catch (Exception e) 37 { 38 MessageBox.Show("服务器开启失败!\r\n" + e.ToString()); 39 40 } 41 42 }
3、WebSocket 客户端代码:
1 WebSocket ws; 2 bool isConnected; 3 4 public void Connect() 5 { 6 try 7 { 8 if (isConnected == false) 9 { 10 ws = new WebSocket("ws://localhost:9999"); 11 ws.OnOpen += ws_OnOpen; 12 ws.OnMessage += ws_OnMessage; 13 ws.OnClose += ws_OnClose; 14 ws.Connect(); 15 } 16 } 17 catch (Exception ex) 18 { 19 } 20 } 21 22 void ws_OnOpen(object sender, EventArgs e) 23 { 24 SetTextBoxText(textBox1, "已连接服务器" + "\r\n"); 25 isConnected = true; 26 27 } 28 void ws_OnClose(object sender, CloseEventArgs e) 29 { 30 SetTextBoxText(textBox1, "服务器已断开" + "\r\n"); 31 isConnected = false; 32 } 33 34 void ws_OnMessage(object sender, MessageEventArgs e) 35 { 36 try 37 { 38 string message = e.Data; 39 40 //显示接收的服务器信息 41 SetTextBoxText(textBox1, message); 42 43 //给服务器发送信息 44 ws.Send("Hello World!"); 45 46 47 } 48 49 catch (Exception ex) 50 { 51 } 52 } 53 54 55 56 public delegate void DelSetTextBoxText(TextBox txtBox, string str); 57 public void SetTextBoxText(TextBox txtBox, string str) 58 { 59 if (txtBox.InvokeRequired) 60 { 61 DelSetTextBoxText del = new DelSetTextBoxText(SetTextBoxText); 62 this.Invoke(del, new object[] { txtBox, str }); 63 } 64 else 65 { 66 txtBox.Text += str + "\r\n"; 67 } 68 }