增强功能:
- 独立线程侦听连接请求
- 线程池处理连接通信
- AES 256位数据加密传输
下载地址:
演示程序界面:
演示程序源代码:
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Windows.Forms;
- using Splash.Net.Sockets;
- using Splash.Windows.Forms;
- namespace RunServer
- {
- public partial class Form1 : Form
- {
- private TcpListenerPlus Server;
- public Form1()
- {
- InitializeComponent();
- }
- private void button_Start_Click(object sender, EventArgs e)
- {
- if (Server == null)
- {
- try
- {
- Server = new TcpListenerPlus(IPAddress.Parse(textBox_IP.Text), Convert.ToInt32(textBox_Port.Text));
- Server.OnThreadTaskRequest += new TcpListenerPlus.ThreadTaskRequest(GetAnswer);
- ((Button)sender).Text = "关闭服务器";
- }
- catch (Exception)
- {
- if (Server != null)
- {
- Server.Stop();
- Server = null;
- }
- MessageBoxPlus.Show(this, "启动服务器失败!", "信息");
- }
- }
- else
- {
- Server.Stop();
- Server = null;
- ((Button)sender).Text = "启动服务器";
- }
- }
- private void button_Clear_Click(object sender, EventArgs e)
- {
- textBox_Notes.Clear();
- }
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (Server != null)
- {
- Server.Stop();
- }
- }
- private void GetAnswer(object sender, EventArgs e)
- {
- TcpClient tcpClient = (TcpClient)sender;
- using (NetworkStreamPlus Stream = new NetworkStreamPlus(tcpClient.GetStream()))
- { // 调整接收缓冲区大小
- Stream.ReceiveBufferSize = tcpClient.ReceiveBufferSize;
- Stream.SecretKey = GetSecretKey(); // 加密密钥
- while (true)
- {
- try
- {
- // 获取查询内容
- String Question;
- Stream.Read(out Question);
- // 返回查询结果
- String Answer = Question.ToUpper();
- Stream.Write(Answer);
- SetText(Question + "\r\n");
- SetText(Answer + "\r\n\r\n");
- }
- catch (Exception ex)
- {
- Type type = ex.GetType();
- if (type == typeof(TimeoutException))
- { // 超时异常,不中断连接
- SetText("数据超时失败!\r\n\r\n");
- }
- else
- { // 仍旧抛出异常,中断连接
- SetText("中断连接异常原因:" + type.Name + "\r\n\r\n");
- throw ex;
- }
- }
- }
- }
- }
- // 对 Windows 窗体控件进行线程安全调用
- private String GetSecretKey()
- {
- if (textBox_SecretKey.InvokeRequired)
- {
- return (String)textBox_SecretKey.Invoke(new Func<String>(() => { return textBox_SecretKey.Text; }));
- }
- else
- {
- return textBox_SecretKey.Text;
- }
- }
- // 对 Windows 窗体控件进行线程安全调用
- private void SetText(String text)
- {
- if (textBox_Notes.InvokeRequired)
- {
- textBox_Notes.BeginInvoke(new Action<String>((msg) =>
- {
- textBox_Notes.AppendText(msg);
- }), text);
- }
- else
- {
- textBox_Notes.AppendText(text);
- }
- }
- }
- }
原文转自:http://blog.csdn.net/jhqin/article/details/7552886