现在本人做了一个PHP的服务器 
然后和一个C的客户端做Socket通讯
但是发现一个问题 就是客户端在链接服务端的时候
经常会出现有时候连的上 有时候连不上的情况 
请问是什么问题PHPC服务器通信socket

解决方案 »

  1.   

    这原因也太多了吧,不胜枚举
    查查errorNo
      

  2.   

    我自己做PHP做客户端是没问题的 但是他那边过来就不行
      

  3.   

    他那边 是哪边?
    怎么又php做客户端了?
      

  4.   

    是这样的 我自己做了客户端范围随时都是OK的 但是他C那边链接我的服务器就不行
    因为SOcket监控的就那么几个函数 配置也是固定的 所以我也不知道他为什么有时候又连接不上
    有时候关闭服务器 或者重启几次 他就有可能连上
      

  5.   

    服务端是 CLI 方式的吗?
    你应该检查一下是否有服务端被重复启动的可能性php 有自动垃圾回收机制,而 C 并没有。若有多于的连接存在,也会造成阻塞
      

  6.   

    始终还是很笼统如果自写测试的客户端在本机的话基本上不能检测网络问题,所以硬件和外部网络因素不能排除
    如果确认服务器端socket运行正常的话(没有超过运行时间限制之类),就要看服务器因素
    网关防火墙之类的问题多的是
    检查应该要在远程客户端输出错误号举个例子:
    我刚才看图片,一张能显示,下一张就不能显示了,刷新两次又能显示了,所以问题既不是浏览器也不是服务器程序有问题,只不过是网络不畅而已(最后确认是DNS不好使,换了一个就顺畅了),只是打比方所以说你这个现象说的那么笼统是很难判断的,一定要看客户端的出错原因
    即使连接不上也有很多可能的,10060 超时,10054 客户端突然断开,10053 服务器端断开……
    换台机器,尝试一下proxy之类,电信跟教育网,就算程序怎么正常,连不上就连不上,测试一百遍也没用
      

  7.   

    关于5楼的问题 应该是不存在的 
    因为我通过Linux的命令 可以看到只是跑了一个服务端的 
    应该是没有重复启动的可能
      

  8.   

    关于6楼的回答 
    因为 服务端是跑在服务器上的 通过php -q  用SSH 把他跑起来的
    我做的客户端 是在我本机的  然后通过了几个地方进行远程连服务端 基本可以排除网络的原因 
    因为我自己做的客户端 随时随地几乎都可以连上 但是C做的客户端 时而还是连不上
    而且我一直在ping 服务器 ping值正常 关于C那边的客户端输出的错误 他和我说 C那边有时候是连接超时 一类的错误信息请问有没有可能和服务器的配置有关系
      

  9.   

    刚才去问了对方的开发人员 好像有时候是 10060   有时候是10048 错误 C那边的错误显示 WSAETIMEDOUT
      

  10.   

    10048 正常情况下每一个套接字地址(协议/IP地址/端口号)只允许使用一次。当应用程序试图使用bind()函数将一个被已存在的或没有完全关闭的或正在关闭的套接字使用了的IP地址/端口号绑扎到一个新套接字上时,该错误发生10060 超时撤掉SSH试试,SSH相当于加了一道socks5的墙
    据我所知,socket连接socks5是不同于一般连接的
      

  11.   

    请问撤掉SSH 是什么意思  ?直接让他在服务端永远的跑起来吗?
      

  12.   

    不太了解*nix,不知道你说的SSH是否就是我所知道的SSH
    不知道你的客户端php是什么环境,如果也是*nix,连接SSH不太麻烦
    但windows就不是那么简单C那边的错误号是10060表明是win平台(*nix平台超时不是这个错误号),所以直接socket应该连不上and 我也没做过SSH连接,只知道书本知识
      

  13.   

    客户端的是C#那边做的  是在WIN上的
    我所说的SSH 是只是用一个远程的工具连接上了我们的服务器 服务器的Linux的
    然后跑起来了上面的一个PHP程序而已 不是你想的那个他经常有时候可以连的上 在连不上的时候把服务端程序停一下 过段时间 基本又可以连上了
      

  14.   

    搞不清楚状况,算了10060 连不上无非就是中间网络哪个环节出了什么问题
    逐个排查,换端口、换机器、换测试时间……你写的php可以不代表网络就没问题,你把php拿到他们的机器,或者他们的C#拿到你的机器测试才能说得上不是网络问题