1. Socket
- 使用原始Socket,Send和Recv方法 进行发送和消息获取。(另起后台线程 不停获取和发送)
-
public void RecvMsg() { //receive message bool isListen = true; while (isListen) { string recStr = ""; byte[] recBytes = new byte[4096]; int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0); recStr += Encoding.UTF8.GetString(recBytes, 0, bytes); if (!String.IsNullOrWhiteSpace(recStr)) { if (recStr.EndsWith(Environment.NewLine)) { recStr = recStr.Substring(0, recStr.Length - Environment.NewLine.Length); } AppendContet(recStr); } } }
-
- 使用Socket BeginSend 和BeginReceive 进行异步发送和消息获取。
-
private void button1_Click(object sender, EventArgs e) { //send message string sendStr = txtMsg.Text; byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr); clientSocket.BeginSend(sendBytes, 0, sendBytes.Length, SocketFlags.None, new AsyncCallback(Send_Complete), clientSocket); } private void Send_Complete(IAsyncResult e) { if (e.IsCompleted) { AppendDebugMsg("异步发送已完成"); } else { AppendDebugMsg("异步发送失败"); } var socket = e.AsyncState as Socket; if (socket == null) { AppendDebugMsg("发送异步Socket为空"); } }
-
- 使用 SocketAsyncEventArgs 进行高效率 异步发送和消息获取。
-
public void SendAync(byte[] sendBytes) { SocketAsyncEventArgs sendSocketArgs = GlobalConfig.SendPool.Pop(); sendSocketArgs.UserToken = this; sendSocketArgs.SetBuffer(sendBytes, 0, sendBytes.Length); this.ClientSocket.SendAsync(sendSocketArgs); }
-
2. Socket 与 WebSocket进行相互通信
- 前端Html5 WebSocket搭建
- Socket 接收和发送方法改进 支持 WebSocket。
其他:
- java对于 Socket的支持 ,及 ReadLine 造成的IO阻塞。
- 异常捕获,及废弃Socket处理