最近在做一个项目需要实现手机与PC数据互通,PC做为服务器端,手机为客户端,我用的C#写的socket程序通过手机向PC请求建立TCP连接,但是当手机客户端发出TCP请求时,PC端的socket.accept()已接收,但客户端的socket.connect()始终阻塞。
手机通过GPRS上网,连接点位cmnet。这是哪方面的问题啊,求大虾或做过这方面的帮帮忙啊补充:数据线连接时以及模拟器上没问题,真机上就是以上问题。

解决方案 »

  1.   

    数据传送完之后,pc回发一个标识给手机,以告诉手机,数据我接收完了。手机在接到pc的确认标识之后,关闭socket连接。
      

  2.   

    http://topic.csdn.net/u/20101210/11/f4557fc7-3f8b-4ba9-bfbf-7e91e155005f.html
      

  3.   

    你可以为pc端加上一个 HttpListener,只要不到30行代码即可,让它仍然按照tcp的协议来解析和返回。http通信在gprs上非常正常,可以顺利通过移动层层封锁。
      

  4.   

    sp1234 能不能具体点啊,我没搞过HttpListener,高人啊,在论坛上经常看到你
      

  5.   

    搜索啊:http://www.google.com.hk/search?q=httplistener&hl=zh-CN&safe=strict&prmd=ivns&source=lnt&tbs=lr:lang_1zh-CN|lang_1zh-TW&lr=lang_zh-CN|lang_zh-TW&sa=X&ei=ebhfTcelOoW3cM6BxYoK&ved=0CAcQpwUoAQ
      

  6.   

    是把TCPlistener换成Httplistener来做吗,不用tcplistener
      

  7.   

    为什么要换呢?用10分钟写上20行左右代码,只是多一个http接入的能力,不需要阉割以前的程序。
      

  8.   

    谢谢sp1234啊
    还是不是很明白是怎样个解析法啊,多一个http接入能力怎样理解呀,初学.net很多不会
      

  9.   

    你原来的tcp怎样解析收到的数据?这跟接入方式没有关系,都是把接收到的数据交给你原来的那个处理程序嘛。多一种接入方式,只不过是接收客户端传来的数据,然后交给处理程序得到返回数据,然后用这种接入方式再输出给客户端。所以tcp、http、namedpipe等等接入方式,都是只有很短的二三十行代码的差别嘛。客户端可以选择任何一种方便联网的方式来访问服务器。
      

  10.   

    你不是说“数据线连接时以及模拟器上没问题”吗?!我们拿上面我搜到的那些列表中第二个、msdn上的代码例子看看好了,你可以通过
       context.Request.Url.AbsolutePath
       context.Request.QueryString[...]
    等来查看url,看看客户端要访问哪一个功能(这个跟asp.net其实是一样的),也可以通过
       context.Request.InputStream
    里读取客户端post上传的消息内容,调用你已经写好的tcp中的处理方法,得到要返回的消息,然后通过
        context.Response.OutputStream
    返回给客户端。这跟tcp的读取和写出消息是一样的,只不过现在是从context.Request.InputStream和context.Response.OutputStream这两个数据流来处理读取和写出而已。
      

  11.   

    还是不行,我的电脑网络环境是在校园网内的局域网,可能原因就在这里吧,看来不搞个公网IP是不行了。现在有个问题就是为什么UDP可以到达,TCP连接就不成功而且TCP还能收到连接请求,这是不是也是网络环境的问题啊
      

  12.   

    暴露在公网的固定IP测试通过,IPv6普及就好了