欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.Net网络编程——服务端获取客户端连接

程序员文章站 2024-01-22 08:49:46
    一,客户端服务端连接图示             其中,在客户端和服务...

 

 

一,客户端服务端连接图示

 

 

 

.Net网络编程——服务端获取客户端连接

 

 

 

其中,在客户端和服务端的socket中,都报存这连接的信息;客户端通过connect连接,服务端可以调用accepttcpclient来获取链接到服务端的客户端,每一个客户端和服务端的连接都对应这唯一一个socket.

 

 

 

二,服务端获取连接示例

 

 

 

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.net;
using system.net.sockets;


namespace 获取单一客户端连接
{
    class program
    {
        static void main(string[] args)
        {
            #region 获取单一客户端连接

                //console.writeline("服务端启动啦啦啦。。");
                //ipaddress ip = new ipaddress(new byte[] { 127, 0, 0, 1 });
                //tcplistener listener = new tcplistener(ip, 8500);
                //listener.start();
                //console.writeline("服务端开始监听8500。。。。");

                ////获取一个连接,中断方法
                //tcpclient remoteclient = listener.accepttcpclient();//获取一个与客户端的连接,同时它返回一个tcpclient类型示例,此时它所包装的是由服务端去往客户端的socket(这是一个block method)

                ////打印连接到客户端的信息
                //console.writeline("客户端连接成功。本地:{0}------>客户端{1}", remoteclient.client.localendpoint, remoteclient.client.remoteendpoint);

            #endregion

            #region 获取多个客户端的连接

                console.writeline("服务端启动啦啦啦。。");
                ipaddress ip = new ipaddress(new byte[] { 127, 0, 0, 1 });
                tcplistener listener = new tcplistener(ip, 8500);
                listener.start();
                console.writeline("服务端开始监听8500。。。。");

                while (true)
                {
                    /*
                        将服务端放入一个始终执行的循环中。
                     
                     */

                    //获取一个连接,中断方法
                    tcpclient remoteclient = listener.accepttcpclient();//获取一个与客户端的连接,同时它返回一个tcpclient类型示例,此时它所包装的是由服务端去往客户端的socket(这是一个block method)

                    //打印连接到客户端的信息
                    console.writeline("客户端连接成功。本地:{0}------>客户端{1}", remoteclient.client.localendpoint, remoteclient.client.remoteendpoint);
                }
            
               
            #endregion
        }
    }
}

 

 

 

ps:accepttcpclient是一个同步的方法,对比ajax的异步,可以发现如果服务端获取不到客户端的连接,就会一直阻塞在这里,而不是像ajax请求数据的时候,下面的东西可以继续,成功后回调。