手机通过socket与PC建立TCP连接问题

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

补充:数据线连接时以及模拟器上没问题,真机上就是以上问题。

14 个解决方案

#1


数据传送完之后,pc回发一个标识给手机,以告诉手机,数据我接收完了。

手机在接到pc的确认标识之后,关闭socket连接。

#3


你可以为pc端加上一个 HttpListener,只要不到30行代码即可,让它仍然按照tcp的协议来解析和返回。

http通信在gprs上非常正常,可以顺利通过移动层层*。

#4


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

#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


先谢谢啦
我在研究研究先

#12


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

#13


该回复于2011-02-22 16:20:17被版主删除

#14


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

#1


数据传送完之后,pc回发一个标识给手机,以告诉手机,数据我接收完了。

手机在接到pc的确认标识之后,关闭socket连接。

#2


#3


你可以为pc端加上一个 HttpListener,只要不到30行代码即可,让它仍然按照tcp的协议来解析和返回。

http通信在gprs上非常正常,可以顺利通过移动层层*。

#4


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

#5


#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


先谢谢啦
我在研究研究先

#12


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

#13


该回复于2011-02-22 16:20:17被版主删除

#14


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