c# TCP/IP編程

  這東西不少朋友都有寫過了,我也就寫着玩玩,就當作個筆記吧。不廢話了。服務器

  TCP/IP在數據通訊中被普遍的使用,天然得包含客戶端和服務端,固然,本身自言自語不是什麼不能夠,可那樣貌似有點神經。spa

  好了,那就先來創建服務端吧。blog

  一、新建一個項目,就取名叫MyServer吧,而後敲入以下代碼:ip

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

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

            TcpListener listener = new TcpListener(ip, 250);
            listener.Start(); // 開始偵聽io

            Console.WriteLine("開始監聽……");
            Console.WriteLine("\n輸入\"Q\"鍵退出。");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;
            }
            while (key != ConsoleKey.Q);
        }
    }
}class

  好了,運行……顯示服務已啓動。cli

  接下來看看咱們監聽的端口號250是否是已經在被監聽狀態。以下圖:服務器端

  二、好啦,一切正常。下面開始來編寫客戶端吧。

  從新打開一個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這東西啊,服務端和客戶端,真是要在茫茫人海中,找到對方不容易啊。即便你知道她家在哪兒,並且還有她們家的鑰匙,要是你在去她們家的路上遇到個程咬金擋路,不讓你過去你也沒辦法。因此,爲了可以順利到她們家,咱們就得想一想其它辦法了。也就是……回頭有空的時候我再來寫一下怎麼確保順利到達她們家吧。

相關文章
相關標籤/搜索