using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;namespace Socket服务器端
{
    public partial class Form1 : Form
    {
        Socket socket;
        Thread thread;
        public delegate void Call_Listen();        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            thread = new Thread(new ThreadStart(Call));
            thread.Start();
        }        //取得主机的IP地址
        public static IPAddress GetServerIP()
        {
            IPHostEntry IPe = Dns.GetHostByName(Dns.GetHostName());
            return IPe.AddressList[0];
        }        //监听客户连接请求
        public void BeginListen()
        {
            //取得服务器IP地址
            IPAddress ServerIP = GetServerIP();            //指定服务器终结点
            IPEndPoint iep = new IPEndPoint(ServerIP,8000);            //指定网络使用协议
            socket = new Socket   (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            
            byte [] bytmsg =new byte[100];
                   //绑定服务终结点
            socket.Bind(iep);            //监听客户端连接
            while (true)
            {
                try
                {
                    socket.Listen(10);
                    Socket recvSocket = socket.Accept();
                    recvSocket.Receive(bytmsg);
                    string sTime = System.DateTime.Now.ToShortDateString();
                    string msg = sTime + ": Message From";
                    msg += recvSocket.RemoteEndPoint.ToString() + Encoding.Default.GetString(bytmsg);
                    listBox1.Update();
                    listBox1.Items.Add(msg);
                }
                catch (SocketException se)
                {
                    label1.Text = se.ToString();
                }
            }// do while 
        }        //使用委托
        public void Call()
        {
            Call_Listen cl = new Call_Listen(BeginListen);
            this.Invoke(cl);
        }
    }
}