服务器端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace multithreadservTest
{
class Threadtcpserver
{
/* 本程序中采用了多线程技术,可以应付多客户的需求。首先,程序的主线程也就是程序的入口即Main()函数,
* 当执行到Accept方法时,线程变会阻塞;当有新连接时,就创建相应的消息服务线程。而主程序则继续进行监听,
* 检查有没有新的连接进入。如果客户端有向服务器连接的请求,那么就把连接句柄传递给接收的套接字。由于线程
* 的调度和切换是非常快的,快得足以让我们分辨不出程序的运行顺序,所以从宏观上来讲,可以说程序是并行执行
* 的。但事实上,从微观的角度上说,只是cpu飞快地调度线程,让我们感觉好像可以同时接收连接和处理消息一样,
* 但在一个时刻,只有一个线程是处于运行状态的。
*/
/// <summary>
/// 下面这段代码的业务逻辑是:
/// (1)创建套接字server,并将其与本地终结点iep进行绑定。然后,在13000端口上监听是否
有新的客户端进行连接
/// (2)在无限循环中有一个阻塞的方法Accept,该方法直到有新客户端连接到服务器上时,把
客户端的套接字信息传递给client对象。否则,将阻塞 直到有客户机进行连接。
/// (3)ClientThread类负责客户端与服务器端之间的通信。先把客户端的套接字句柄传递给
/// 负责消息服务的ClientThread类。然后,把ClientThread类 的ClientService方
法委托给线程,并启动线程。
/// </summary>
private Socket server;
public Threadtcpserver()
{
//初始化IP地址
IPAddress local=IPAddress.Parse("192.168.5.187");
IPEndPoint iep =