Socket服务端及客户端实例
服务端:
class Program
{
static List<Socket> Sockets = new List<Socket>();
static string port = ConfigurationManager.AppSettings["Port"];
static void Main(string[] args)
{
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, Convert.ToInt32(port));
Socket listener = new Socket(localEP.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEP);
listener.Listen(20);
Console.WriteLine("服务已启动,监听端口"+ port +",等待客户端连接....");
while (true) //该操作用于多个客户端连接
{
Socket sc = listener.Accept();//接受一个连接
Sockets.Add(sc); //将连接的客户端, 添加到内存当中
Thread t = new Thread(new ThreadStart(() => ServiceSocket.ReceiveData(sc)))
{
IsBackground = true
}; //开启当前Socket线程, 去执行获取数据的动作,与客户端通信
t.Start();
Console.WriteLine("接收到1个连接....");
Thread.Sleep(1);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.ReadLine();
}
}
public class ServiceSocket
{
public static void ReceiveData(Socket mySocket)
{
if (mySocket == null) return;
while (true)
{
try
{
string data = string.Empty;
byte[] buffer = new byte[1024 *1024];
int count = mySocket.Receive(buffer);
data = Encoding.UTF8.GetString(buffer, 0, count);
Console.WriteLine(data);
byte[] byteArray = Encoding.UTF8.GetBytes("返回信息");
mySocket.Send(byteArray);
Console.WriteLine("sucess");
break;
}
catch (Exception ex)
{
mySocket.Shutdown(SocketShutdown.Both);
mySocket.Close();
Console.WriteLine(ex);
_logHelper.Error(ex);
}
}
}
}
客户端
class ClientSocket
{
public void OnDataSend()
{
try
{
Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ie = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8885);
try
{
newclient.Connect(ie);
byte[] m_DataBuffer = new byte[1024 * 1024];
Task.Factory.StartNew(() =>
{
while (true)
{
int receiveLength = newclient.Receive(m_DataBuffer);
var recev = Encoding.UTF8.GetString(m_DataBuffer, 0, receiveLength);
Console.WriteLine("接受服务器消息:{0}", recev);
Thread.Sleep(1);
}
});
}
catch (SocketException e)
{
throw;
}
byte[] byteArray = Encoding.UTF8.GetBytes("发送消息");
newclient.Send(byteArray);
}
catch (Exception ex)
{
throw;
}
Console.Read();
}
}