Socket 实现不同计算机之间通讯,发送/接收消息

public class SocketConnection : IDisposable
    {
        public Byte[] msgBuffer = new byte[1048576];
        private Socket _clientSocket = null;

        public Socket ClientSocket
        {
            get { return this._clientSocket; }
        }

        public byte[] ReceivedBytes = null;
        #region 构造
        public SocketConnection(Socket sock)
        {
            this._clientSocket = sock;
        }
        #endregion
        #region 连接
        public void Connect(IPAddress ip, int port)
        {
            this.ClientSocket.BeginConnect(ip, port, ConnectCallback, this.ClientSocket);
        }
        private void ConnectCallback(IAsyncResult ar)
        {
            try
            {
                Socket socket = (Socket)ar.AsyncState;
                if (socket != null && socket.Connected)
                {
                    socket.EndConnect(ar);
                }
            }
            catch (SocketException ex)
            {

            }
        }
        #endregion
        #region 发送数据
        public void Send(string data)
        {
            Send(System.Text.Encoding.Default.GetBytes(data));
        }
        private void Send(byte[] byteData)
        {
            try
            {
                this.ClientSocket.BeginSend(byteData, 0, byteData.Length, 0,new AsyncCallback(SendCallback), this.ClientSocket);
            }
            catch (SocketException ex)
            {

            }
        }
        private void SendCallback(IAsyncResult ar)
        {
            try
            {
                Socket socket = (Socket)ar.AsyncState;
                if (socket != null && socket.Connected)//这时的socket有可能已经被关闭,资源被释放掉了
                {
                    socket.EndSend(ar);
                }
            }
            catch (SocketException ex)
            {

            }
        }
        #endregion
        #region 接收数据
        public void ReceiveData()
        {
            _clientSocket.BeginReceive(msgBuffer, 0, msgBuffer.Length, 0, new AsyncCallback(ReceiveCallback), null);
        }
        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                ReceivedBytes = null;
                int receivedByteCount = _clientSocket.EndReceive(ar);
                if (receivedByteCount > 0)
                {
                    ReceivedBytes = new byte[receivedByteCount];
                    Array.Copy(msgBuffer, 0, ReceivedBytes, 0, receivedByteCount);
                }
                else
                {
                    Dispose();
                }

            }
            catch (SocketException ex)
            {

            }
        }
        public void Dispose()
        {
            try
            {
                ClientSocket.Shutdown(SocketShutdown.Both);
                ClientSocket.Close();
            }
            catch (Exception ex)
            {

            }
        }
        #endregion
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值