zoukankan      html  css  js  c++  java
  • c# TCP/IP编程

      这东西很多朋友都有写过了,我也就写着玩玩,就当做个笔记吧。不废话了。

      TCP/IP在数据通信中被广泛的使用,自然得包含客户端和服务端,当然,自己自言自语不是什么不可以,可那样貌似有点神经。

      好了,那就先来建立服务端吧。

      1、新建一个项目,就取名叫MyServer吧,然后敲入如下代码:

    using System;
    using System.Net;
    using System.Net.Sockets;

    namespace MyServer
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Server服务已启动……");
                IPAddress ip = Dns.GetHostEntry("localhost").AddressList[0];

                TcpListener listener = new TcpListener(ip, 250);
                listener.Start(); // 开始侦听

                Console.WriteLine("开始监听……");
                Console.WriteLine("\n输入\"Q\"键退出。");
                ConsoleKey key;
                do
                {
                    key = Console.ReadKey(true).Key;
                }
                while (key != ConsoleKey.Q);
            }
        }
    }

      好了,运行……显示服务已启动。

      接下来看看我们监听的端口号250是不是已经在被监听状态。如下图:

      2、好啦,一切正常。下面开始来编写客户端吧。

      重新打开一个VS窗口,新建项目MyClient,然后录入如下代码:

    using System;
    using System.Net.Sockets;

    namespace MyClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("客户端启动……");
                TcpClient client = new TcpClient();
                try
                {
                    //与服务器连接
                    client.Connect("localhost", 250);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return;
                }
                // 打印连接到的服务端信息
                Console.WriteLine("已经成功与客户端建立连接!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);

                Console.WriteLine("\n输入\"Q\"键退出。");
                ConsoleKey key;
                do
                {
                    key = Console.ReadKey(true).Key;
                }
                while (key != ConsoleKey.Q);
            }
        }
    }

      看起来一切都是那么清晰明了,好啦,启动运行——沃日!没反应?打个断点跟踪一下试试?

      看到那个异常了不?“由于目标计算机积极拒绝,无法连接。127.0.0.1:250”

      靠,我的目标计算机这么积极的啊?是防火墙干的好事吗?关了——不行,一样。端口号被占用了?不能用250?那我换2500呢?多换几个试试……:-D:-D还是不可以的,说明没有端口号什么事。那程序运行权限不够?那我用管理员运行下试试——还是不行。这玩意儿真是不如WCF那么省心啊!

      好吧,我把这localhost换成IP地址试试。先通过ipconfig看看自己的IP地址是什么,额,192.168.175.1,好吧,都换了。

      服务端的IP那里换成:

      IPAddress ip = IPAddress.Parse("192.168.175.1");

      客户端那换成:

      client.Connect(System.Net.IPAddress.Parse("192.168.175.1"), 2500);

      再运行试试,通了通了,可以了诶!看下图:

      呵呵呵,对了,看到上图中那两个端口号没?第一个来自客户端,是由客户端自个儿自己随机分配的,后面那个2500就是我们监听的服务器端的端口号(把250-->2500)

      其实TCP/IP这东西啊,服务端和客户端,真是要在茫茫人海中,找到对方不容易啊。即使你知道她家在哪儿,而且还有她们家的钥匙,要是你在去她们家的路上遇到个程咬金挡路,不让你过去你也没办法。所以,为了能够顺利到她们家,我们就得想想其它办法了。也就是……回头有空的时候我再来写一下怎么确保顺利到达她们家吧。

  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/paluano/p/5150593.html
Copyright © 2011-2022 走看看