close
單向的訊息傳遞程式

簡介

程式範例

由於網路程式必須有連線,因此至少要有兩個程式才能運作,通常主動連線的一方稱為 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() 
    {
        try {
          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();
        } catch (Exception e) {
          Console.WriteLine("Client "+socket.RemoteEndPoint+" Error : close");
          Console.WriteLine(e);
        }
    } 
	

}

陳鍾誠 (2010年06月15日),(網頁標題) C# 單向的訊息傳遞程式,(網站標題) 免費電子書:C# 程式設計,2010年06月15日,取自 http://cs0.wikidot.com/tcpclientserver1 ,網頁修改第 1 版。

arrow
arrow

    Johnson峰 發表在 痞客邦 留言(0) 人氣()