socket 网络通信:自己对线程的理解。什么时候我们需要新建一个线程

 

黑马程序员--鄢振东

好坑爹啊,服务器等待用户连接到服务器,因为这是一个重复的连接过程,且过程中会有很多用户连接上来,
那么我们就不能让服务器去等待用户连接和不停的建立连接,服务器,只需要提供一个 可以让自己的帮手去
帮自己做这件事情,那么他的责任就到这了, 这个帮手只需要做到帮助连接,他的责任就到这里了,
然后建立一个连接后,我们客户端连接到服务器了,如果我们需要和服务器里面无限制的交流,那么这也就不
能让 这个连接继续去做这件事情了, 因为他的责任已尽,那么剩下的就是出来了一个真正的妹子来和你聊天
了,并且可以重复聊天,这就是他的任务。。。。。 做好任务的分配,这才是一个好的团体。。。。。
对应与上面所说的就是 当我们需要对一件固定的事情 重复的做的时候,我们可以新建一个后台线程来做
这件事。就不需要让 主线程去做这件事情了。这就是老赵常给我们说的,面向对象就是一句话,就是找个人帮你
做事情,对啊,找个人帮你做这件事情,

//创建一个接管 女生宿舍的宿管阿姨,用来接收客户端的请求,然后 对请求进行处理,
//这里是创建的一个基于IP4通信的,TCP协议,Tcp是用的Stream来弄的,UDp是通过Dgram来弄的。
Socket socketAnct = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 给服务器这边的应用程序分配端口号。
IPAddress ip = IPAddress.Any;// IPAddress.Parse(txtServer.Text)
IPEndPoint point = new IPEndPoint(ip, int.Parse(txtPort.Text));
//让宿管阿姨监听你的 这个应用程序的端口号。
socketAnct.Bind(point);
//设置 监听队列的最大值。即访问这个程序的最大人数。
socketAnct.Listen(10);
Msg("监视成功,等待男生来找,最多10个额。");
Thread th=new Thread(Accepte);//将我要做的事情封装成一个方法,然后将这个方法委托给这个新线程,让他帮你去做
th.IsBackground=true;
th.Start(socketAnct);


private void Accepte(object sock)
{
Socket socketAnct = sock as Socket;
while (true)
{
socketDo = socketAnct.Accept();
//显示下
Msg(socketDo.RemoteEndPoint.ToString() + "连接成功");

//连接成功后,我们就准备开始聊天了。因为聊天是一个重复的过程,那么请个妹子过来和你聊吧。。。。
Thread th = new Thread(ReciveMassage);
th.IsBackground = true;
th.Start(socketDo);
}
}
private void
{
Socket socketDo = obj as Socket;
while (true)
{
byte[] buffer = new byte[1024 * 1024];
int r = socketDo.Receive(buffer);
if (r == 0)
{
return;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);
Msg(socketDo.RemoteEndPoint.ToString() + " : " + str);
}
}

 

posted @ 2014-07-12 00:26  经历  阅读(1618)  评论(0编辑  收藏  举报