端口的访问被拒绝的问题

a1988lourong 2014-10-27 12:31:26
上周六还可以正常使用
今天就访问被拒绝了。
winform, 有一个单独的设置并打开串口的窗体,单步运行的时候可以看到串口一开始是关闭的,open后就打开了,到最后关闭当前串口窗体的时候,串口的IsOpen属性都是true。但是,在另外的地方调用它的时候,就提示端口被关闭。在调用前写一句打开串口的语句,就提示端口的访问被拒绝。
同样的代码,怎么突然就不能正常打开串口了?
...全文
3812 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1988lourong 2014-11-04
  • 打赏
  • 举报
回复
同一个串口重复被打开了,谢谢各位
於黾 2014-10-28
  • 打赏
  • 举报
回复
你想在子窗体里控制串口打开关闭没有问题 但是你的串口对象必须是操作的同一个 也就是说,要么把串口对象定义成全局的,比如放在program.cs里,不管主窗体还是子窗体都直接用这个对象 要么就在打开子窗体的时候将对象传入,比如将mainform中的port对象传递给form2的变量,然后form2操作这个变量 port对象是个引用类型,所以你在form2里不重新new的话,其实操作的是同一个对象.
我不懂电脑 2014-10-27
  • 打赏
  • 举报
回复
重启软件和硬件后,再试
a1988lourong 2014-10-27
  • 打赏
  • 举报
回复
有点深奥·····之前确实是在主窗体里放着,后来想为串口单独开个窗口才放到了子窗体里,要是放子窗体里有办法让正常使用吗
於黾 2014-10-27
  • 打赏
  • 举报
回复
要放form里,你必须放到主窗体里,而不是放到子窗体里去 你放到form2里去,还敢说全局都用的同一个变量... 那不是每打开一次form2,都是一个新的变量了吗
a1988lourong 2014-10-27
  • 打赏
  • 举报
回复
在form.cs里,每次调用都先实例化form了
於黾 2014-10-27
  • 打赏
  • 举报
回复
如果你把对象定义在Common.cs里,你应该用单例或静态类 不能每次使用都实例化一个出来,那样操作的就不是同一个对象了
於黾 2014-10-27
  • 打赏
  • 举报
回复
那么既然你说全局都用的同一个对象,这个对象定义在哪里 是在program.cs里,还是在form.cs里,还是Common.cs里?
a1988lourong 2014-10-27
  • 打赏
  • 举报
回复
只有一个,全局都用的同一个对象
於黾 2014-10-27
  • 打赏
  • 举报
回复
这跟你调用串口的方法写在哪里没啥关系 问题就是,你的串口对象到底有几个,是全局都使用同一个对象,还是在Common.cs里定义了一个,在form里又定义了一个
a1988lourong 2014-10-27
  • 打赏
  • 举报
回复
用的AccessPort,串口本身没有问题。 在设置串口的窗体,把判断改成如果串口是打开状态,就把串口关闭,和leafmao 的意思一样,在别的地方open就可以成功了。但是我调用串口是在Common.cs的一个公共方法里,在这里写个Form.serial.open()并不是我期望的。
Pigeon汪 2014-10-27
  • 打赏
  • 举报
回复
一般是只在主窗体中设置一个串口的全局变量,串口的打开与关闭也只在主窗体中执行,其它窗口只是调用这个全局变量来发送数据。 如果在串口还未被关闭并释放的情况再调用串口的打开方法,肯定会报错的。
於黾 2014-10-27
  • 打赏
  • 举报
回复
如果你确定硬件没问题的话 找找软件原因 你在主窗体中用的时候,跟打开的窗体中用的是同一个对象吗? 比如你在子窗体中打开了COM1,那么这个COM对象是全局的,或者传递到主窗体中用,还是在主窗体中重新new了个COM对象,又去重复打开COM1??
leafmao 2014-10-27
  • 打赏
  • 举报
回复
关闭当前窗体前判断下串口是否被打开,是就关掉。这样别的地方就好调用了
於黾 2014-10-27
  • 打赏
  • 举报
回复
你先用串口调试助手,或者COMMIX之类的软件,先测试串口到底有没有问题 串口有问题,找硬件维修的地方去修理,或者换个串口卡 硬件没问题,你再纠结软件到底被谁改了
xian_wwq 2014-10-27
  • 打赏
  • 举报
回复
找第三方工具再试试
a1988lourong 2014-10-27
  • 打赏
  • 举报
回复
还是不行······
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不想更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         

110,539

社区成员

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

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

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