using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace SocketDemo
{
class Program
{
/// <summary>
/// 服务器:
/// 接收请求
/// 发送数据
/// 接收数据
/// 断开链接
/// </summary>
private static Socket serverSocket = null;
static void Main(string[] args)
{
//AddressFamily.InterNetwork 地址族
//SocketType.Stream 指定类型
//ProtocolType.Tcp 指定协议
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//端口号范围 0-65535
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 9999);
//进行绑定
serverSocket.Bind(endPoint);
//10 代表连接队列最大长度
serverSocket.Listen(10);
//开一个线程,接收客户端连接
Console.WriteLine("开始监听:");
Thread thread = new Thread(ListenClientConnect);
thread.Start();
}
//监听客户端连接
private static void ListenClientConnect()
{
//等待 有客户端连接的时候 就会触发这个函数 返回一个客户端的socket对象
Socket clientSocket = serverSocket.Accept();
Console.WriteLine("客户端连接成功!" + clientSocket.AddressFamily.ToString());
//向客户端发送消息
clientSocket.Send(Encoding.Default.GetBytes("服务器告诉你连接成功了!"));
//开一个线程,接收客户端消息
Thread recThread = new Thread(ReceiveClientMessage);
recThread.Start(clientSocket);
}
//接收来自客户端的消息
private static void ReceiveClientMessage(object clientSocket )
{
//强制转换 object → Socket
Socket socket = clientSocket as Socket;
//字节类数组
byte[] buffer = new byte[1024];
//接收客户端数据 length 代表接收数据的长度
int length = socket.Receive(buffer);
//在控制台输出接到的消息
Console.WriteLine(Encoding.Default.GetString(buffer,0,length));
}
}
}