本文共 4032 字,大约阅读时间需要 13 分钟。
客户端:////// socket发送字节数组 /// /// 要发送的byte[] /// 服务器IP /// 服务器端口 ///接收的byte[] public static byte[] SendBySocket(byte[] sendData, string ip, int port) { byte[] byteReceive = null; try { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(IPAddress.Parse(ip), port); socket.Send(sendData); int count, size = 512; byte[] data = new byte[size]; MemoryStream ms = new MemoryStream(); while (0 != (count = socket.Receive(data, size, SocketFlags.None))) ms.Write(data, 0, count); byteReceive = ms.ToArray(); ms.Close(); //方法2 //int bytes = 0; //MemoryStream ms = new MemoryStream(); //while (true) //{ // byte[] byteMessage = new byte[10]; // bytes = socket.Receive(byteMessage, byteMessage.Length, 0); // if (bytes <= 0) // break; // ms.Write(byteMessage, 0, bytes); //} //byteReceive = ms.ToArray(); //ms.Close(); socket.Shutdown(SocketShutdown.Both); socket.Close(); } catch { return null; } return byteReceive; }
服务端:
bool btnstatu = true; //开始停止服务状态 Socket listener; //开始停止服务按钮 private void btnStart_Click(object sender, EventArgs e) { CancellationTokenSource cts = new CancellationTokenSource(); Task task = new Task(() => Listen(cts.Token), cts.Token); if (btnstatu) { task.Start(); statuBar.Text = "服务已启动,等待客户端连接"; btnstatu = false; btnStart.Text = "停止服务"; } else { if (listener != null) { listener.Close(); listener = null; } cts.Cancel(); statuBar.Text = "服务端已停止服务"; btnstatu = true; btnStart.Text = "开始服务"; statuBar.Text = "服务已停止"; } } //监听函数 private void Listen(CancellationToken cts) { cts.ThrowIfCancellationRequested(); listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); IPEndPoint iep = new IPEndPoint(IPAddress.Any, ServerConfig.ServerPort); try { listener.Bind(iep); listener.Listen(10); while (true) { Socket accept = listener.Accept(); byte[] byteMessage = new byte[1024]; accept.Receive(byteMessage); string recvMsg = Encoding.Default.GetString(byteMessage).Replace("\0", ""); ShowText(DateTime.Now.ToString("[HH:mm:ss]") + accept.RemoteEndPoint.ToString() + "说:" + recvMsg); string sendMsg = "已收到消息"; accept.Send(Encoding.Default.GetBytes(sendMsg)); accept.Shutdown(SocketShutdown.Both); accept.Close(); } } catch { } } private void ShowText(string msg) { richTextBox1.SafeCall(() => { richTextBox1.AppendText(msg); richTextBox1.AppendText(System.Environment.NewLine); }); }
转载地址:http://tmzrf.baihongyu.com/