至于C#里面socket编制程序的一点清楚

这几天倒腾socket编程,在新浪找到了张子阳二弟的socket编制程序的多重小说看了很不错 。

网上也有为数不少看似的小说,小编那里也断然炒剩饭 。献丑了哈

率先还是用tcpListener 跟tcpClient吧 先把基础的搞懂了再说

socket编制程序的概念用大家此前老师的话说正是三个近似打电话 恐怕管仲 的概念。

干什么是通话捏,如若要赤手空拳连接( 打电话)
此外壹端不会知道您什么样时候会打给她
只怕及时也也许过很久,正是说始终有1方要从来守在那里 等待接入
这正是tcpListener

约等于服务端总是要运用tcplistener。

上边看一下白手起家最中央的树立tcpListener:

static void Main(string[] args)
{
    //在本机的6500端口上建立侦听
    TcpListener listener = new TcpListener(6500);
    listener.Start();

    ConsoleKey key;
    Console.WriteLine("请按Q键退出!!");
    do
    {
        key = Console.ReadKey().Key;
    } while (key != ConsoleKey.Q);
}

程序运维后 在指令行使用 netstat -a 可看出如下音讯:

图片 1

别忘了加上张子阳小弟的那几句“请按Q键退出”的代码
,要不然闪一下就过了看不到任何效果。

下边大家来2个客户端连服务器 然后从服务端接收三个字符串的例子:

服务端:

static void Main(string[] args)
{
    //在本机的6500端口上建立侦听
    TcpListener listener = new TcpListener(6500);
    //启动侦听
    listener.Start();

    Console.WriteLine("server is running...");
    while (true)
    {
        //处理新的接入
        TcpClient client = listener.AcceptTcpClient();
        NetworkStream stream = client.GetStream();
        string str = "MrXiang";
        stream.Write(Encoding.ASCII.GetBytes(str), 0, str.Length);
    }
}

客户端:

static void Main(string[] args)
{
    //远程主机ip+端口
    IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
    IPEndPoint port = new IPEndPoint(ip, 6500);

    TcpClient client = new TcpClient();
    //建立连接
    client.Connect(port);

    //System.Threading.Thread.Sleep(1000);

    NetworkStream stream = client.GetStream();
    byte[] data = new byte[client.Available];

    stream.Read(data, 0, data.Length);

    Console.WriteLine(Encoding.ASCII.GetString(data));

    ConsoleKey key;
    Console.WriteLine("请按Q键退出!!");
    do
    {
        key = Console.ReadKey().Key;
    } while (key != ConsoleKey.Q);
}

何以简单吗,先运转服务端 然后运维客户端

唯独在客户端你会发现有时候你收不到字符串 (要看运气了)有时后又收获得:

图片 2
图片 3

您调用 client.Available 属性发现每一次都是0 也正是说未有其它数据可供读取。

下一场把这句 //System.Threading.Thread.Sleep(一千); 注释去掉
。保障每趟都会接受字符串

这是怎么捏 ,且听贫僧娓娓道来:

当然两端有分其余tcpClient对象 他们之间是未曾任何干涉的(那不废话吗
两台计算机上) 你读你的数额 小编写小编的多少,并且读还不肯定就读得到数据
因为她们之间
根本就是不1起的
你不可能须求旁人怎么时候在另一端把数据写入,尽管另壹端在内定时间把数量写入了
网络难点 延迟啥的
各个难题错综复杂复杂
都不能够担保你在怎么着时间势必会收取数量(那正是地点为啥要动用sleep
来等待服务端务必把多少发送完整了才开始展览读取)
小编们能做的只可以是确立三个连接(这一个啥子2遍握手 啥的 笔者也不懂)
然后平昔在充足连接上收发二进制数据 实在等得受不鸟了就 咔嚓, 仅此而已
那正是socket
笔者们往socket那些包裹好的“邮筒”里投邮件 收邮件,至于邮件能否送到
什么日期送到 那么些大家都不能够决定

只是他们两端用的tcpClient 却又有某种关联
好像正是二个一律,就象是1根“管仲”把多少个tcpClient连接起来了
一边读另一只就写
而她们中间来来往往的是二进制数据 嗯“管仲”3个影象的比喻
执行3回再而三就会有“1对”端口现身 因为三个劳动端 3个客户端

图片 4

图片 5
可是那些“管仲”通通是建立在tcpListener之上的

相关文章