黑马程序员技术交流社区
标题: 关于多线程中套接字的问题 [打印本页]
作者: 黑马郭 时间: 2013-12-19 16:18
标题: 关于多线程中套接字的问题
本帖最后由 黑马郭 于 2013-12-25 20:28 编辑
请各位大虾们指点一下 不胜感激 ……
服务端接受客户端发送的消息,部分代码如下:
/// <summary>
/// 负责监听客户端连接请求的方法
/// </summary>
public void WatchConnection()
{
while (true)//持续不断的监听客户端新的连接请求
{
Socket socketConnection = socketWatch.Accept();
dic.Add(socketConnection.RemoteEndPoint.ToString(), socketConnection);
lbKey.Items.Add(socketConnection.RemoteEndPoint.ToString());
//创建线程 调用通信套接字的Receive方法
Thread thr = new Thread(ServeReceive);
thr.IsBackground = false;
thr.Start(socketConnection);//疑问
dicthread.Add(socketConnection.RemoteEndPoint.ToString(), thr);
ShowMsg("客户端连接成功!" + socketConnection.RemoteEndPoint.ToString());
}
}
/// <summary>
/// 接收客户端发来的数据的方法
/// </summary>
public void ServeReceive(object ServeSocketPara)//疑问
{
Socket ServeSocket = ServeSocketPara as Socket;
while (true)//循环监听
{
byte[] arrMsgReceive = new byte[1024 * 1024 * 2];
int length = ServeSocket.Receive(arrMsgReceive);
string strMsgReceive = System.Text.Encoding.UTF8.GetString(arrMsgReceive, 0, length);
ShowMsg(strMsgReceive);
}
}
疑问:第一个方法中的启动线程所传的套接字参数socketConnection和第二个方法中所传的参数ServeSocketPara是否一样,都是服务端监听到客户端所创建的套接字对象?
作者: 如远行客 时间: 2013-12-19 17:30
这两个套接字是同一个套接字,只是在客户端和服务端的名称不一样。在服务端,当监听方法检测到客户端发来的请求后,会自动的生成一个套接字,就是socketConnection,而客户端则通过ServeSocketPara这个套接字来和服务端通信。这实际上就是同一个连接,在这个连接上,可以往返发送和接收数据。
不过这是我一家之言,我的理解就是这样。
作者: 黑马郭 时间: 2013-12-20 09:28
谢谢回答 学习了……
作者: SunshineGirl 时间: 2013-12-25 13:56
当别的同学回答你的问题了,要及时设置成“提问结束”,这样才能得技术分。
作者: 黑马郭 时间: 2013-12-25 20:27
ok 好的 谢谢提醒
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |