用了很多方法如Application.Exit()和Application.ExitThread()都不行
2.Form类中定义一个类MyTCPServer,无法使用Form中得Listbox,说是不在进程中创建的Listbox,
怎么把这句话 Console.WriteLine("正在监听...") ;写在Listbox中
怎么实现,新手,写下代码。
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Diagnostics;
namespace TcpService
{
public partial class Form1 : Form
{
public delegate void SetThreadState(int nClientID);
public static int nCountRecv = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
/////////////////////////////////////////////////////////////////////////////
/// <summary>
/// socket服务器类,负责监听以及连接
/// </summary>
public class MyTCPServer
{
private int nListenPort = 4000;
private int nMaxClient = 500; //同时连接500个客户端
private TcpListener tlTcpListen;
private bool bIsListen = true;
private Thread thAccept;
MySocketProv[] RunSocketInfo;
bool[] ThreadRun;
public void DoStartIT()
{
try
{
RunSocketInfo = new MySocketProv[nMaxClient]; //500个客户端数组
ThreadRun = new bool[nMaxClient]; //500个客户端状态数组
for (int i = 0; i < nMaxClient; i++)
{
ThreadRun[i] = false;
RunSocketInfo[i] = new MySocketProv();
RunSocketInfo[i].ThreadState = SetExitThread;
}
tlTcpListen = new TcpListener(nListenPort); //以20812端口号来初始化TcpListener实例
tlTcpListen.Start(); //开始监听网络的连接请求
Console.WriteLine("正在监听...");
thAccept = new Thread(AcceptThread);
thAccept.Start();
}
catch (System.Security.SecurityException)
{
Console.WriteLine("侦听失败!错误");
Console.ReadLine();
}
}
public void DoExitIT()
{
bIsListen = false;
thAccept.Abort();
tlTcpListen.Stop();
for (int i = 0; i < nMaxClient; i++)
{
if (ThreadRun[i])
{
RunSocketInfo[i].ExitThread();
}
}
}
/// <summary>
/// 获取当前空的 ID
/// </summary>
/// <returns></returns>
private int GetEmptySocket()
{
int i = 0;
for (i = 0; i < nMaxClient; i++)
{
if (ThreadRun[i] == false)
{
break;
}
}
if (i == nMaxClient)
{
return -1;
}
else
{
return i;
}
}
/// <summary>
/// 接收线程
/// </summary>
private void AcceptThread()
{
while (bIsListen)
{
int nSocketID = GetEmptySocket();
if (nSocketID != -1)
{
Console.WriteLine("启动监听 {0} ", nSocketID);
RunSocketInfo[nSocketID].nClientID = nSocketID;
RunSocketInfo[nSocketID].mSocket = tlTcpListen.AcceptSocket();
RunSocketInfo[nSocketID].bIsRunNow = true;
Console.WriteLine("已经连接!{0}", nSocketID);
ThreadRun[nSocketID] = true;
RunSocketInfo[nSocketID].DoStartRead();
// Thread workObject = new Thread(ThreadProv);
// workObject.Start();
}
else
{
Thread.Sleep(100); //延时100ms 再尝试 -> 此时为已经满连接,等待中>>>>>
}
}
//////
}
private void SetExitThread(int nClientID)
{
ThreadRun[nClientID] = false;
}
}
/////////////////////////////////////////////////////////////////////////////