您的位置:首页 > 其它

关于Socket传输对象

2016-11-19 11:48 218 查看
最近有个项目关于用socket传输对象话不多说直接上代码服务端
Thread TcpThread = new Thread(new ThreadStart(Listen));            TcpThread.Start();//启动一个子线程来调用socket的监听方法 
Socket socketAccpet;
public void Listen(){            
	IPAddress address = IPAddress.Parse("192.168.1.218");            Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);            IPEndPoint IP = new IPEndPoint(address, 3000);MessageBox.Show("监听已启动");socketAccpet = tcpSocket.Accept();            tcpSocket.Bind(IP);tcpSocket.Listen(10);while (true){thread.Start();//可能有并发请求,所以消息的接收也需要在子线程中处理                  Thread thread = new Thread(new ThreadStart(ReceiveMsg));}
}
public void ReceiveMsg()        {            byte[] buffer = new byte[1024];            MemoryStream mStream = new MemoryStream();            mStream.Position = 0;            while (true)            {                int ReceiveCount = socketAccpet.Receive(buffer, 1024, 0);                if (ReceiveCount == 0)                {                    break;//接收到的字节数为0时break                  }                else                {                    mStream.Write(buffer, 0, ReceiveCount); //将接收到的数据写入内存流                  }            }            mStream.Flush();            mStream.Position = 0;            BinaryFormatter bFormatter = new BinaryFormatter();            if (mStream.Capacity > 0)            {                //将接收到的内存流反序列化为对象                 Police1 p = (Police1)bFormatter.Deserialize(mStream);                this.BeginInvoke(new Action(() => {                                        UpdateUI(p);                                }));                            }            else            {                //Console.WriteLine("接收到的数据为空。");            }            socketAccpet.Close();        }客户端public void sendMsg(Object obj)        {tryFaceModel model = obj as FaceModel;            {IPAddress IP = IPAddress.Parse("192.168.1.218"); ;                Socket socketSend = null;while (true)socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);                {IPEndPoint Ip = new IPEndPoint(IP, 3000);MemoryStream mStream = new MemoryStream();                    socketSend.Connect(Ip);bformatter.Serialize(mStream, model); //将消息类转换为内存流                      BinaryFormatter bformatter = new BinaryFormatter();  //二进制序列化类mStream.Flush();while (mStream.Read(buffer, 0, buffer.Length) > 0)                    byte[] buffer = new byte[1024];mStream.Position = 0;  //将流的当前位置重新归0,否则Read方法将读取不到任何数据{if (socketSend != null)                        socketSend.Send(buffer); //从内存中读取二进制流,并发送}break;}socketSend.Close();}}            catch (Exception ex){MessageBox.Show(ex.ToString());}
 void InitSocketThread()        {            socketTh = new Thread(new ThreadStart(InitSocket));            socketTh.IsBackground = true;            socketTh.Start();        }
public void InitSocket()        {            IPAddress[] ips = Dns.GetHostEntry(Dns.GetHostName()).AddressList;            String ip = String.Empty;            foreach (var item in ips)            {                if (item.AddressFamily.ToString() == "InterNetwork")                {                    ip = item.ToString();                    break;                }            }            DeviceSet[] dss = CGlobalData.Instance.Service.GetDeviceSetting(ip);            foreach (var item in dss)            {                if (item.Keydesc == "ServerIP")                {                    point = new IPEndPoint(IPAddress.Parse(item.Kvalue), 55555);                    break;                }            }            Boolean isConnection = false;            while (!isConnection)            {                try                {                    client.Client.Connect(point);                    isConnection = true;                }                catch (Exception ex)                {                    isConnection = false;                }            }有一点很重要,客户端和服务端的对象必须来自同一dll
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐