传对象(socket)给不同的线程,对像改变后线程中的对象却没有改变,这是何解呢?(王凯明:浅析C#中的套接字编程 中的源码)

poetc 2003-04-07 06:14:02
在socket服务端编程中,
//Form1中
private Socket clientsocket;
private Thread clientservice;

Socket s = listener.AcceptSocket();
this.clientsocket = s;
clientservice = new Thread(new ThreadStart(ServiceClient));
clientservice.Start();

//下面是ServiceClient()
private void ServiceClient()
{
Socket client = clientsocket;
bool keepalive = true;
...

//ServiceClient中的client和this.clientsocket不是指向同一内存地址吗?
那么当有不同的客户端连接后,有不同this.clientsocket,会建不同的线程,但线程中client却不同;
这是何解呢??



下面是文章出处;
程序运行是没问题的。
http://www.aspcool.com/lanmu/browse.asp?page=3&bbsuser=csharp
or
http://www.gbnis.com/searcha.asp?key_word=%C7%B3%CE%F6C%23%D6%D0%B5%C4%CC%D7%BD%D3%D7%D6%B1%E0%B3%CC&search_software=%CB%D1%CB%F7

or

http://www.gbnis.com/read_file.asp?type_id=&id=3236&left=
...全文
37 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
poetc 2003-04-08
  • 打赏
  • 举报
回复
呵呵,想通啦;

这两天累坏啦,连这种问题都想不通。



poetc 2003-04-08
  • 打赏
  • 举报
回复
我想Socket s = listener.();是系统新建了一个socket对象(通过AcceptSocket函数),然后s就成为它的引用,随后clientsocket成为s的引用,client成为clientsoket的引用
//那么,client将成为s的引用;

同样,第二个线程的client是系统新建的另一个socket对象的引用
//是新建一个引用;但clientsocket是新建的socket对象的引用;那么,client不改变指向这个新建的socket吗?


所以两个线程的client是不一样的

//所以,???



pdsinfo 2003-04-07
  • 打赏
  • 举报
回复
呵呵,不好意思,上面我说的不对
“Socket client = clientsocket;”不表示新建一个Socket的实例client,它表示是把client作为clientsocket的引用。

我想Socket s = listener.();是系统新建了一个socket对象(通过AcceptSocket函数),然后s就成为它的引用,随后clientsocket成为s的引用,client成为clientsoket的引用

同样,第二个线程的client是系统新建的另一个socket对象的引用

所以两个线程的client是不一样的
pdsinfo 2003-04-07
  • 打赏
  • 举报
回复
“Socket client = clientsocket;”表示新建一个Socket的实例client,并用另一个实例clientsocket来初始化client(在C++里叫默认拷贝构造函数),并不表示二者“指向同一内存地址”
随后,clientsocker被新的s初始化了,另一个线程的client被新的clientsokcet初始化
所以两个线程的client是不一样的

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧