您的位置:首页 > 移动开发 > Android开发

android java.net.ConnectException: Connection refused: connect

2012-04-13 13:52 483 查看
服务端代码:
package com.tbk;
/*
*
* android学习之 Socket编程
* UDP传输协议: 类似邮递,以数据包的形式发送。速度比较快,但目标是否正确接收,不负责验证。
* 以DatagramSocket/DatagramPackages处理。
* TCP传输协议:准确度较高,能够验证数据传输是否成功。
* 以ServerSocket/InputStream处理。
* 以TCP协议为例实现过程中遇到的问题
*
* 第一种测试:用PC作客户端,用android做服务端
*/
import java.io.InputStream;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.Enumeration;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class NewSocketActivity extends Activity {
Button btnSocket = null;
TextView textView = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setContentView(R.layout.main);

btnSocket = (Button) findViewById(R.id.btnSocket);
textView = (TextView) findViewById(R.id.socketText);

btnSocket.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//实在无法猜测手机的地址,被迫,查询得知
System.out.println(GetHostIp());
new ServerThread().start();
}
});
}

class ServerThread extends Thread {
public void run() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(6767);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte buffer[] = new byte[1024 * 4];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, temp));
}
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
} finally {
try {
serverSocket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

public String GetHostIp() {

try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr
.hasMoreElements();) {
InetAddress inetAddress = ipAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress();
}
}
}
}  catch (Exception e) {

}
return null;
}
}


客户端代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//根据ip地址,端口号创建一个socket
//这个地址获得的很辛苦,网络上很多人也多卡壳了
//127这样的地址都提示: java.net.ConnectException: Connection refused: connect
//我后来是写了个获得手机地址的方法,结果还非法了。直到把wifi打开,获取到了一个地址。见服务端的GetHostIp方法,至此,才正确
Socket socket = new Socket("192.168.1.111", 6767);
//创建一个从文件中读取内容的输入数据流
InputStream inputStream = new FileInputStream("e://sqlnet.log");
//创建一个要通过socket发送数据的输出流
OutputStream outputStream = socket.getOutputStream();
byte buffer[] = new byte[1024*4];
int temp=0;
//循环,将文件输入流的内容写到socket的输出流中,即发送出去。
while ((temp=inputStream.read(buffer))!=-1){
outputStream.write(buffer, 0, temp);
}
outputStream.flush();

} catch (Exception e) {
e.printStackTrace();
}
}

}


成功。
注释中最重要的
这个地址获得的很辛苦,网络上很多人也多卡壳了

127这样的地址都提示: java.net.ConnectException: Connection refused: connect

我后来是写了个获得手机地址的方法,结果还非法了。直到把wifi打开,获取到了一个地址。见服务端的GetHostIp方法,至此,才正确

还要注意一点,需要给对应的权限:
<uses-permission android:name="android.permission.INTERNET"/>


之后就是一下篇,PC做服务端,手机做客户端,同样会有Connection refused: connect的错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐