C# : 單向的訊息傳遞程式

作品

書籍

課程

程式集

小說集

論文集

散文集

影片集

編輯雜誌

程式人

電子書

JavaScript

計算語言學

微積分

Blender 動畫

C# 語言

系統程式

高等 C 語言

Java

Android

Verilog

Wikidot

R 統計軟體

機率統計

計算機數學

組合語言

人工智慧

開放原始碼

網路資源運用

計算機結構

相關訊息

常用工具

友站連結

在家教育

RSS

最新修改

網頁列表

簡體版

English

簡介

程式範例

由於網路程式必須有連線,因此至少要有兩個程式才能運作,通常主動連線的一方稱為 Client,被動等待連線的一方稱為 Server,這就是所謂的 Client - Server 架構。

在本範例中,我們撰寫了一個 TcpClient 與一個 TcpServer 程式,TcpClient 連線到 TcpServer 之後,會將使用者所輸入的文字傳司送給 TcpServer。當 TcpServer 收到這些文字之後會印出在螢幕上,這個範例示範了一個極為簡單的網路程式架構。

檔案:TcpClient1.cs

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

public class TcpClient
{
    public static void Main(string[] args)
    {
        IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(args[0]), 20);

        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        server.Connect(ipep);

        while(true)
        {
            string input = Console.ReadLine();
            if (input == "exit")
            break;
            byte[] data = Encoding.UTF8.GetBytes(input);
//            byte[] data = Encoding.ASCII.GetBytes(input);
            server.Send(data);
        }
        Console.WriteLine("Disconnecting from server...");
        server.Shutdown(SocketShutdown.Both);
        server.Close();
    }
}

檔案:TcpServer1.cs

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

public class TcpServer
{
    public static void Main()
    {
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 20);

        Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        newsock.Bind(ipep);
        newsock.Listen(10);

        while(true)
        {
            Socket client = newsock.Accept();
            IPEndPoint clientep = (IPEndPoint) client.RemoteEndPoint;
            Console.WriteLine("Client End Point = " + clientep);
            // create a new thread and then receive message.
            TcpListener listener = new TcpListener(client);
            Thread thread = new Thread(new ThreadStart(listener.run));
            thread.Start();
        }
//        newsock.Close();
    }
}

public class TcpListener {
    Socket socket;

    public TcpListener(Socket s)
    {
        socket = s;
    }

    public void run() 
    {
        while (true) 
        {
            byte[] data = new byte[1024];
            int recv = socket.Receive(data);
            if (recv == 0) break;
            Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
        }
        socket.Close();
    }
}

上述程式的執行結果如下所示:

TcpClientServer1.jpg

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License