android java.net.ConnectException: Connection refused: connect

服务端代码:

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 en = NetworkInterface
			.getNetworkInterfaces(); en.hasMoreElements();) {
				NetworkInterface intf = en.nextElement();
				for (Enumeration 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方法,至此,才正确

 

还要注意一点,需要给对应的权限:


之后就是一下篇,PC做服务端,手机做客户端,同样会有Connection refused: connect的错误

 

你可能感兴趣的:(android学习)