关于Socket传输对象

最近有个项目关于用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)
{ try
FaceModel 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值