Android真机与PC间通信无法建立连接!

Happy_Bing 2014-09-08 11:42:34
问题描述:用Eclipse分别写了一个客户端(Android)与服务器(java),其之间通过无线路由器用Socket进行通信!在用虚拟机时可以相互连接,但是用真机测试时,就无法连接!我把程序简单一下,发布上来,还希望大神能速度的为我解决一下!先谢谢了~

程序代码:

服务器(JAVA):

package com.zlb.control_computer_01;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MainActivity {

public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(9999);
while(true){
System.out.println("你尚未连接上客户端!");
Socket client=server.accept();
System.out.println("恭喜,已连接!");
OutputStream out=client.getOutputStream();
String msg="test";
out.write(msg.getBytes());
client.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}


客户端(Android):

package com.example.phone_test_01;

import java.io.InputStream;
import java.net.Socket;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void ButtonOnClick(View view)
{
TextView text=(TextView)findViewById(R.id.text);
try {
text.setText("等待建立Socket!");
Socket socket=new Socket("192.168.1.106",9999);
text.setText("Socket连接已完成!");
InputStream in= socket.getInputStream();
byte[] buffer=new byte[in.available()];
in.read(buffer);
String msg=new String(buffer);
text.setText(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}


附:AndroidManifest(代码):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.phone_test_01"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

<!--允许应用程序完全使用网络-->
<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.phone_test_01.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


附界面布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="目前尚未连接电脑!" />
<Button
android:id="@+id/connect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="ButtonOnClick"
android:text="连接电脑!"/>

</LinearLayout>


程序在真机测试时在Socket socket=new Socket("192.168.1.106",9999);这里就始终没有建立连接!

附加解释:之前我也看了百度上的各种解释,有的说是IP问题,我把IP改成宽带IP或者局域网IP在虚拟机上都可以连接,但是在真机上都是不可以连接的!还有一个人说是Android3.1版本在网络通信方面加强了,需要加一个district,但是后面他也没说明具体怎么加。最近在做程序,希望那位大神可以早点为我解决,网上有很多人都为这个问题困扰!


...全文
549 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mzmdh 2014-10-08
  • 打赏
  • 举报
回复
 byte[] buffer=new byte[in.available()];             in.read(buffer); 这句话好像有问题吧,我怎么记得网络流调用available()方法返回的都是0?你打个断点看看,是不是0.
勤奋的小游侠 2014-09-10
  • 打赏
  • 举报
回复
引用 12 楼 qq_20452721 的回复:
[quote=引用 11 楼 hulongkao 的回复:] 我看到你电脑的ip地址好像是 192.168.1.100 ,不知道对不对。。
IP地址这方面我应该不会弄错的,你自己可是把我的代码在你自己机子上试试,或者你编一个类似的程序在虚拟器跟真机上试试,你就会发现,在虚拟机上可以运行,但是真机上就出问题,我怀疑是不是手机什么参数没有配置好,你别在这跟我猜行不行。。。。[/quote] 也只能提供一些常用的测试方法让你自己搞了。 第一步: 把手机的sim 卡拔出,把手机的2g,3g网络全部禁用。 第二步 在电脑上面ping 手机的ip,确定电脑是可以ping通手机的 第三步 用手机上一下其它的网站,最好是一个可以显示IP的网站,确认手机的外网IP和电脑的外网IP是一样的. 第四步, 将电脑上的所有防火墙,杀毒软件全部关掉。 ---如果装了360什么的,一定要删除掉这个流氓软件,不要问为什么。 第五步, 如果9999端口还是用不了,就改用8080端口,这些公共端口一般上防火会封掉。 好了,自己弄去吧,再弄不好就换台手机换台电脑试试
Happy_Bing 2014-09-09
  • 打赏
  • 举报
回复
引用 4 楼 liusondark 的回复:
把异常贴出来


liusondark 2014-09-09
  • 打赏
  • 举报
回复
把异常贴出来
Happy_Bing 2014-09-09
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
首先确认一下真机是通过wifi连接的网络,第二,确认真机的IP和 Socket socket=new Socket("192.168.1.106",9999); 这个IP是在同一个网段上面。 你的问题肯定是出在真机和电脑不在同一个网段上面的。
如何确定他们是不是在同一网段?我给他们连接的都是同一个路由器,这还不是用一个网段吗???
Happy_Bing 2014-09-09
  • 打赏
  • 举报
回复
如何确定他们是不是在同一网段?我给他们连接的都是同一个路由器,这还不是用一个网段吗???
Happy_Bing 2014-09-09
  • 打赏
  • 举报
回复
引用 11 楼 hulongkao 的回复:
我看到你电脑的ip地址好像是 192.168.1.100 ,不知道对不对。。


IP地址这方面我应该不会弄错的,你自己可是把我的代码在你自己机子上试试,或者你编一个类似的程序在虚拟器跟真机上试试,你就会发现,在虚拟机上可以运行,但是真机上就出问题,我怀疑是不是手机什么参数没有配置好,你别在这跟我猜行不行。。。。
龙哥1997 2014-09-09
  • 打赏
  • 举报
回复
我看到你电脑的ip地址好像是 192.168.1.100 ,不知道对不对。。
Happy_Bing 2014-09-09
  • 打赏
  • 举报
回复
引用 9 楼 hulongkao 的回复:
Socket socket=new Socket("192.168.1.106",9999); 你确定 服务器地址 iP :192.168.1.106 端口9999?

可是我代码就是这么写的啊,由于路由器IP地址会有变化,我把路由器我的IP地址粘一下,你看看吧~
我现在的电脑IP是192.168.1.102,手机是192.168.1.106,那我在设置服务器的地址不就应该是:Socket socket=new Socket("192.168.1.102",9999); 至于异常里面为什么会全部自动变成别的,我也不清楚啊,这些在模拟器上都是可以相互通信的,还希望大家可以快速的帮我解决一下问题,别说一下哪里有问题,然后就从此不见人了~我的QQ:625670665,姓名:赵立兵,有知道的方便的,Q我也行,谢谢了~
龙哥1997 2014-09-09
  • 打赏
  • 举报
回复
Socket socket=new Socket("192.168.1.106",9999); 你确定 服务器地址 iP :192.168.1.106 端口9999?
龙哥1997 2014-09-09
  • 打赏
  • 举报
回复
61.145.124.212 端口还是 8082 这要是能连上就怪了。
龙哥1997 2014-09-09
  • 打赏
  • 举报
回复
很明显的服务器ip地址不对。
Happy_Bing 2014-09-09
  • 打赏
  • 举报
回复
引用 4 楼 liusondark 的回复:
把异常贴出来

我重新贴一下吧!这次把所有的显示都贴出来~
勤奋的小游侠 2014-09-08
  • 打赏
  • 举报
回复
首先确认一下真机是通过wifi连接的网络,第二,确认真机的IP和 Socket socket=new Socket("192.168.1.106",9999); 这个IP是在同一个网段上面。 你的问题肯定是出在真机和电脑不在同一个网段上面的。

4,360

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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