Scoket编程模型
服务器端
1.创建Socket对象,设置协议、传输方式等(连接Socket) Socket()
2.绑定IP与端口(设置要监听的IP与端口) Bind()
3.开始监听 Listen()
4.开始接受客户端连接 //阻塞线程,同时也需要循环不断接受用户连接 Accept()
5.接受了哭护短的连接,生成一个新的Socket对象(通信Socket)
6.接受和发送消息//需要循环不断接收用户的消息 Receive()、Send()
7.禁用发送与接收功能 Shutdown()
8.关闭释放资源 Close()
客户端
1.创建Socket对象,设置协议、传输方式等(连接Socket) Socket()
2.连接服务器(IP与端口) Connect()
3.向服务器发送、接收消息 Receive()、Send()
4.禁用发送与接收资源 Shutdown()
5.关闭释放资源 Close()
模拟在线聊天案例
先看效果图:
服务器端代码:
static void Main(string[] args)
{
//服务器端
//1.创建Socket对象 Socket()
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//InterNetwork表示IPv4,SocketType.Stream表示以流的形式传输,ProtocolType.Tcp表示使用Tcp协议
//2.绑定IP和端口 Bind()、
server.Bind(new IPEndPoint(IPAddress.Parse("192.168.2.108"), 11811));//11811为端口号
//3.监听 Listen()
server.Listen(5);//排队人数,同时等待连接的人数
Console.WriteLine("开启服务器成功");
//4.接收,得到一个代理 Accept()
Thread tAccept = new Thread(() => {
while (true)
{
Socket client = server.Accept();//接收,等客户端连接上
Console.WriteLine("连接上一个客户端");
Thread tReceive = new Thread(() =>{
while (true)
{
//5.通过代理进行通信 Receive()接收 Send()发送
byte[] bs = new byte[1024];
int length = client.Receive(bs);//接收客户端发来的消息
string str = Encoding.UTF8.GetString(bs, 0, length);//字节数组转成字符串进行输出
Console.WriteLine("客户端" + client.RemoteEndPoint + ":" + str);//输出接受的信息
}
});
tReceive.IsBackground = true;
tReceive.Start();
}
});
tAccept.IsBackground = true;
tAccept.Start();
Console.ReadLine();
}
客户端代码:
static void Main(string[] args)
{
//客户端
//创建Socket对象 Socket()
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//InterNetwork表示IPv4,SocketType.Stream表示以流的形式传输,ProtocolType.Tcp表示使用Tcp协议
//连接 Connect()
client.Connect(new IPEndPoint(IPAddress.Parse("192.168.2.108"), 11811));//11811为端口号
Console.WriteLine("连接服务器成功");
while (true)
{
//通信 Receive Send()
string str = Console.ReadLine();
byte[] bs = Encoding.UTF8.GetBytes(str);
client.Send(bs);
}
//关闭释放 Shutdown()Close()
//client.Shutdown(SocketShutdown.Both);
//client.Close();
//Console.ReadLine();
}