1、客户端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using CommData;
//客户端
namespace cilentDemo1
{
class Program
{
static void Main(string[] args)
{
string IP = "127.0.0.1";
int port = 8050;
Console.WriteLine("starup cilent");
try
{
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(IP), port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ipe);
Console.WriteLine("connnect ser");
Cdata cil = new Cdata();
cil.name = "roles_gril";
cil.sex = "gril";
cil.age = 20;
using (MemoryStream meroy = new MemoryStream())
{
BinaryFormatter binary = new BinaryFormatter();
binary.Serialize(meroy, cil);
meroy.Seek(0, SeekOrigin.Begin);
meroy.Flush();
byte[] by = new byte[1024];
while (meroy.Read(by, 0, by.Length) > 0)
{
Console.WriteLine("send size " + by.Length);
socket.Send(by);
}
Console.WriteLine("send over");
socket.Close();
}
}
catch
{
}
Console.ReadKey();
}
}
}
2、服务端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using CommData;
//服务端
namespace serverDemo1
{
class Program
{
static void Main(string[] args)
{
string IP = "127.0.0.1";
int port = 8050;
Console.WriteLine("starup serv");
try
{
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(IP), port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipe);
socket.Listen(10);
Console.WriteLine("start listen");
Socket ac = socket.Accept();
byte[] buffer = new byte[1024];
using (MemoryStream mStream = new MemoryStream())
{
mStream.Seek(0, SeekOrigin.Begin);
while (true)
{
int ReceiveCount = ac.Receive(buffer, 1024, 0);
if (ReceiveCount == 0)
{
break;//接收到的字节数为0时break
}
else
{
Console.WriteLine("成功获取到数据");
mStream.Write(buffer, 0, ReceiveCount); //将接收到的数据写入内存流
}
}
mStream.Flush();
Console.WriteLine("刷新缓冲区");
mStream.Position = 0;
BinaryFormatter bFormatter = new BinaryFormatter();
if (mStream.Capacity > 0)
{
Cdata msg = (Cdata)bFormatter.Deserialize(mStream);//将接收到的内存流反序列化为对象
Console.WriteLine("name " + msg.name + " sex " + msg.sex + " age" + msg.age);
}
else {
Console.WriteLine("接收到的数据为空。");
}
ac.Close();
}
}
catch(Exception e)
{
Console.WriteLine("ex " + e.Message);
}
Console.ReadKey();
}
}
}
3、公用数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//公用数据
namespace CommData
{
[Serializable]
public class Cdata
{
public string name;
public string sex;
public int age;
}
}