1.服务器端
//new一个Socket对象
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定本机IP地址
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
//绑定端口号
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress,88);
//进行绑定
serverSocket.Bind(ipEndPoint);
//开始监听
serverSocket.Listen(0);
//开始接收客户端发来的消息
serverSocket.BeginAccept(AcceptCallBack, serverSocket);
static Message msg = new Message();
static void AcceptCallBack(IAsyncResult ar)
{
Socket serverSocket = ar.AsyncState as Socket;
Socket clientSocket = serverSocket.EndAccept(ar);
//向客户端发送一条消息
string msgStr = "Hello client!你好....";
byte[] data = System.Text.Encoding.UTF8.GetBytes(msgStr);
clientSocket.Send(data);
clientSocket.BeginReceive(msg.Data, msg.StartIndex, msg.RemainSize, SocketFlags.None, ReceiveCallBack, clientSocket);
serverSocket.BeginAccept(AcceptCallBack, serverSocket);
}
static byte[] dataBuffer = new byte[102400];
static void ReceiveCallBack(IAsyncResult ar)
{
Socket clientSocket = null ;
try
{
clientSocket = ar.AsyncState as Socket;
int count = clientSocket.EndReceive(ar);//
if (count == 0)
{
clientSocket.Close();
return;
}
msg.AddCount(count);
//string msgStr = Encoding.UTF8.GetString(dataBuffer, 0, count);
//Console.WriteLine("从客户端接收到数据:"+ msgStr);
msg.ReadMessage();
//clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);
clientSocket.BeginReceive(msg.Data, msg.StartIndex, msg.RemainSize, SocketFlags.None, ReceiveCallBack, clientSocket);
}
catch (Exception e)
{
Console.WriteLine(e);
if (clientSocket != null)
{
clientSocket.Close();
}
}
}
2,客户端
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 88));
byte[] data = new byte[1024];
int count = clientSocket.Receive(data);
string msg = Encoding.UTF8.GetString(data, 0, count);
Console.Write(msg);
byte[] dataBytes = Encoding.UTF8.GetBytes("你好");
int dataLength = dataBytes.Length;
byte[] lengthBytes = BitConverter.GetBytes(dataLength);
byte[] newBytes = lengthBytes.Concat(dataBytes).ToArray();
clientSocket.Send(newBytes);
网友评论