首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 網路程式設計初探(二):伺服器端非同步阻塞模式與執行緒處理

     編輯:關於C語言

伺服器端採非同步阻塞 + 執行緒

為不影響 UI 回應,將監聽、接受連線、收發資料放入獨立執行緒處理。

完整伺服器端程式碼:Server.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Net;

public class Form1 : Form
{
    private ListBox ListBox1;
    private Button button1, button2;
    private Label label1;
    private TextBox textBox1;
    private Socket socketForClient;
    private NetworkStream networkStream;
    private TcpListener tcpListener;
    private StreamWriter streamWriter;
    private StreamReader streamReader;
    private Thread _thread1;
    private Container components = null;

    public Form1() { InitializeComponent(); }

    protected override void Dispose(bool disposing)
    {
        if (disposing && components != null) components.Dispose();
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        label1 = new Label(); button2 = new Button(); button1 = new Button();
        ListBox1 = new ListBox(); textBox1 = new TextBox();
        SuspendLayout();
        label1.Location = new Point(8, 168); label1.Name = "label1";
        label1.Size = new Size(120, 23); label1.TabIndex = 3; label1.Text = "回饋用戶端訊息:";
        Controls.Add(button1); Controls.Add(textBox1); Controls.Add(label1);
        Controls.Add(button2); Controls.Add(ListBox1);
        MaximizeBox = false; MinimizeBox = false;
        Name = "Form1"; Text = "C# 網路程式伺服器端!";
        Closed += new EventHandler(Form1_Closed);
        ResumeLayout(false);
    }

    private void Listen()
    {
        tcpListener = new TcpListener(1234);
        tcpListener.Start();
        socketForClient = tcpListener.AcceptSocket();
        try
        {
            if (socketForClient.Connected)
            {
                ListBox1.Items.Add("已成功連接用戶端!");
                while (true)
                {
                    networkStream = new NetworkStream(socketForClient);
                    streamReader = new StreamReader(networkStream);
                    string msg = streamReader.ReadLine();
                    ListBox1.Items.Add("收到用戶端訊息:" + msg);
                    streamWriter = new StreamWriter(networkStream);
                    if (textBox1.Text != "")
                    {
                        ListBox1.Items.Add("回饋用戶端:" + textBox1.Text);
                        streamWriter.WriteLine(textBox1.Text);
                        streamWriter.Flush();
                    }
                }
            }
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

    static void Main() { Application.Run(new Form1()); }

    private void button1_Click(object sender, EventArgs e)
    {
        ListBox1.Items.Add("服務已啟動!");
        _thread1 = new Thread(new ThreadStart(Listen));
        _thread1.Start();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        networkStream.Close(); streamReader.Close(); streamWriter.Close();
        _thread1.Abort(); tcpListener.Stop();
        socketForClient.Shutdown(SocketShutdown.Both);
        socketForClient.Close();
    }

    private void Form1_Closed(object sender, EventArgs e)
    {
        networkStream.Close(); streamReader.Close(); streamWriter.Close();
        _thread1.Abort(); tcpListener.Stop();
        socketForClient.Shutdown(SocketShutdown.Both);
        socketForClient.Close();
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved