服务端
流程图
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Server
{
class Program
{
static void Main(string[] args)
{
//establish the local end point for the socket
IPHostEntry ipHost = Dns.Resolve("localhost");
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11);
//create a Tcp/Ip Socket
Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//bind the socket to the local endpoint and listen to the incoming sockets
try
{
sListener.Bind(ipEndPoint);
sListener.Listen(10); //这里的参数定义了backlog,它指定队列中挂起的连接的最大数量。
//在上面的代码中,括号中的参数允许队列中有10个连接
//Start listening for connections
while (true)
{
Console.WriteLine("Waiting for a connection on port{0}", ipEndPoint);
//program is suspended while waiting for an incoming connection
Socket handler = sListener.Accept();
string data = null;
//we got the client attempting to connect
while (true)
{
byte[] bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
if (data.IndexOf("<TheEnd>") > -1)
{
break;
}
}
//show the data on the console
Console.WriteLine("Text Received:{0}", data);
string theReply = "Thank you for those" + data.Length.ToString() + "characters..";
byte[] msg = Encoding.ASCII.GetBytes(theReply);
handler.Send(msg);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
客户端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
byte[] bytes = new byte[1024];
//connect to a Remote device
try
{
//Establish the remotee end poingt for the socket
IPHostEntry ipHost = Dns.Resolve("localhost");
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11);
Console.WriteLine("Waiting for a connection on port{0}", ipEndPoint);
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//Connect the socket to the remote endPoint
sender.Connect(ipEndPoint);
Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());
string theMessage = "This is a test";
byte[] msg = Encoding.ASCII.GetBytes(theMessage + "<TheEnd>");
//send the data through the socket
int byteSent = sender.Send(msg);
int bytesRec = sender.Receive(bytes);
Console.WriteLine("The Server says:{0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
//Release the socket
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
catch (Exception e)
{
Console.WriteLine("Exception:{0}", e.ToString());
}
}
}
}
流程图