using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace AsyncTcpServer
{
public partial class FormServer : Form
{
/// 保存连接的所有用户
private List userList = new List();
/// 使用的本机IP地址
IPAddress localAddress;
/// 监听端口
private const int port = 51888;
private TcpListener myListener;
/// 是否正常退出所有接收线程
bool isExit = false;
public FormServer()
{
InitializeComponent();
listBoxStatus.HorizontalScrollbar = true;
IPAddress[] addrIP = Dns.GetHostAddresses(Dns.GetHostName());
//localAddress = addrIP[0];
foreach (var ip in addrIP)
{
//判断是否为IPv4地址
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
localAddress = ip;
break;
}
}
buttonStop.Enabled = false;
}
/// 【开始监听】按钮的Click事件
private void buttonStart_Click(object sender, EventArgs e)
{
myListener = new TcpListener(localAddress, port);
myListener.Start();
AddItemToListBox(string.Format("开始在{0}:{1}监听客户连接", localAddress, port));
Thread myThread = new Thread(ListenClientConnect);
myThread.Start();
buttonStart.Enabled = false;
buttonStop.Enabled = true;
}
/// 监听客户端请求
private void ListenClientConnect()
{
TcpClient newClient = null;
while (true)
{
ListenClientDelegate d = new ListenClientDelegate(ListenClient);
IAsyncResult result = d.BeginInvoke(out newClient, null, null);
//使用轮询方式来判断异步操作是否完成