CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

★★★急死人了,大家帮帮我吧!解决后立即给分!!★★★

楼主junes8250(嬴)2004-05-04 20:21:35 在 .NET技术 / C# 提问

我做了一个MDI程序,Form1是主窗体,Form2,Form3...是子窗体,为了实现"远程处理",并且侦听特定端口,我在Form2的Load事件中分别开了两个线程,代码如下:  
   
  private   void   Form2_Load(object   sender,   System.EventArgs   e)  
  {  
  //新建一个线程用来侦听端口  
   
  listenClient=new   Thread(new   ThreadStart(WatchClient));  
  listenClient.IsBackground=true;  
  listenClient.Start();  
   
   
  //新建一个进程来注册远程对象  
  registerObject=new   Thread(new   ThreadStart(RegistryRemoteObject));  
  registerObject.IsBackground=true;  
  registerObject.Start();  
        }  
  其中:  
  private   void   RegistryRemoteObject()  
  {  
  try  
  {  
  //读取注册表中的信道号  
  RegistryKey   regRead=Registry.LocalMachine.OpenSubKey("SoftWare\\RemoteListServer");  
  int   chan=Convert.ToInt32(regRead.GetValue("channel"));  
   
  //注册远程对象  
  channel=new   TcpChannel(chan);  
  ChannelServices.RegisterChannel(channel);  
  RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteServices),"RemoteServices",WellKnownObjectMode.Singleton);  
   
  regRead.Close();  
  }  
  catch(Exception   e)  
  {  
  MessageBox.Show("2"+e.Message);  
  }  
  }  
  可是在RegistryRemoteObject()中,总是报错:"通常每个套接字地址(协议/网络地址/端口)只允许使用一次",而我在新建的单独的另一个程序中再调试RegistryRemoteObject时,却没错误,由此推断出,问题应该出在RegistryRemoteObject所在的线程中,但是我只看到在书上注册远程组件和侦听端口都是在Main函数中进行,而我必须在Form2中"注册对象"和"侦听断口",却又出现错误,大家帮帮我啦!  
  $$$$$$$$$$$$$$$$$$$$$$$$$  
  问题点数:100、回复次数:14Top

1 楼wen2425(ZJNU(思进))回复于 2004-05-04 21:14:19 得分 0

$Top

2 楼hivak47(比尔)回复于 2004-05-04 21:20:59 得分 0

添加一个for语句行吗?Top

3 楼HNU(嶽麓書院,惟楚有材,於我為盛!)回复于 2004-05-04 23:04:00 得分 0

 
  up   ~Top

4 楼gglovecs(lovecsdn)回复于 2004-05-05 09:08:46 得分 0

要不在每个线程启动时加入判断:地址是否被使用Top

5 楼turnmissile(会翻跟头的导弹)回复于 2004-05-05 16:35:42 得分 0

把通道的端口号设为0,让他自动分配,看看能不能行!  
  //Connecting   to   Server  
  if(_channel   ==   null)  
  {  
  BinaryServerFormatterSinkProvider   provider   =   new   BinaryServerFormatterSinkProvider();  
  provider.TypeFilterLevel   =   System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;  
  //   creating   the   IDictionary   to   set   the   port   on   the   channel   instance.  
  IDictionary   props   =   new   Hashtable();  
  //   Create   a   channel   at   port   number  
  props["port"]   =   0;  
  //   pass   the   props   for   the   port   setting   and   the   server   provider   in   the  
  //   server   chain   argument.   (Client   remains   null   here.)  
  this._channel   =   new   TcpChannel(props,   null,   provider);          
  }  
  try  
  {  
  //   Register   the   channel  
  ChannelServices.RegisterChannel(_channel);  
  }Top

6 楼junes8250(嬴)回复于 2004-05-05 19:50:39 得分 0

我发现错误出现在这里  
                                                                        //用来接受字符的缓冲区  
  byte[]   bytes=new   byte[1024];  
   
  //得到本地终结点  
  IPEndPoint   localEndPoint=GetLocalIPEndPoint();  
   
  //定义套接字类型  
  Socket   listener=new   Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);  
   
  //绑定  
  try  
  {  
  //调用Bind方法将套接字(listener)与本地终结点"关联"**********************出错了  
  listener.Bind(localEndPoint);  
  *****就是这个listener.Bind(localEndPoint)老是报错!其中localEndPoint的端口是1024,  
  怎么办啊?  
  Top

7 楼istring()回复于 2004-05-05 19:57:24 得分 0

注册远程对象不需要在线程里,在一般的函数里就可以,不是么?  
  Top

8 楼redbb(....DB & DEV....抵制日货,人人有责...)回复于 2004-05-05 21:11:46 得分 0

1024   ?     you   should   select   >   5000   portTop

9 楼junes8250(嬴)回复于 2004-05-05 21:34:19 得分 0

为什么?Top

10 楼junes8250(嬴)回复于 2004-05-05 21:42:10 得分 0

书上都说可以在1024~65535之间任意选吗?Top

11 楼redbb(....DB & DEV....抵制日货,人人有责...)回复于 2004-05-05 21:54:52 得分 100

some   System   Process   has   occupied   the   port   :  
   
   端口概念  
   
    在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL   Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。我们这里将要介绍的就是逻辑意义上的端口。    
   
    端口分类  
   
    逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:  
   
    1.   按端口号分布划分  
   
    (1)知名端口(Well-Known   Ports)  
   
    知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。  
   
    (2)动态端口(Dynamic   Ports)  
   
    动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。  
   
    不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是7626、WAY   2.4是8011、Netspy   3.0是7306、YAI病毒是1024等等。  
   
  Top

12 楼redbb(....DB & DEV....抵制日货,人人有责...)回复于 2004-05-05 21:55:00 得分 0

2.   按协议类型划分  
   
    按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。下面主要介绍TCP和UDP端口:  
   
    (1)TCP端口  
   
    TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。  
   
    (2)UDP端口  
   
    UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等  
   
  查看端口  
   
    在Windows   2000/XP/Server   2003中要查看端口,可以使用Netstat命令:  
   
    依次点击“开始→运行”,键入“cmd”并回车,打开命令提示符窗口。在命令提示符状态下键入“netstat   -a   -n”,按下回车键后就可以看到以数字形式显示的TCP和UDP连接的端口号及状态(如图)。  
   
   
   
   
   
    小知识:Netstat命令用法  
   
    命令格式:Netstat   -a   -e   -n   -o   -s  
   
    -a   表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。  
   
    -e   表示显示以太网发送和接收的字节数、数据包数等。  
   
    -n   表示只以数字形式显示所有活动的TCP连接的地址和端口号。  
   
    -o   表示显示活动的TCP连接并包括每个连接的进程ID(PID)。  
   
    -s   表示按协议显示各种连接的统计信息,包括端口号  
   
  Top

13 楼junes8250(嬴)回复于 2004-05-06 09:43:44 得分 0

多谢redbb(....Dotneter....)   ,我把端口选择为>5000后,就通过了.  
  同时也谢谢大家的参与!  
  特加分给大家!!Top

14 楼junes8250(嬴)回复于 2004-05-06 09:47:08 得分 0

不好意思,加不了了,100分已是上限了.Top

相关问题

  • 关于win2000的问题,急死了,给50分,在线给分
  • 请教各位高手!急死了!一定给分!
  • 急死人了!!!高分给简单问题
  • 一个急死人的怪问题,给分
  • 急死我了,近来看得都给分。
  • ★★★★★ado问题,急死我了,来者给分★★★★★
  • 在线等待。修改JS代码。急死了~~~~给分!
  • 急死了,在线等,解决后马上给分
  • SQL 问题。急死人了!解决马上给分!
  • Applet配置问题!急死了!帮顶就给分!

关键词

  • 端口
  • tcp
  • 连接
  • 协议
  • 远程
  • channel
  • 逻辑
  • 线程
  • 
  • 口号

得分解答快速导航

  • 帖主:junes8250
  • redbb

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo