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

Android中的socket编程,基础

2017-04-19 08:59 274 查看
本身就是菜鸟一枚。所以学习的一切东西都是在网上查找资料而得来的。不过如果中间可能会遇到一些问题,这些问题可能大家在学习的时候也会遇到,所以就很小心的记录了下来。

主要源码如下:

Android 客户端:

主要代码:

class MyThread extends Thread {

public String txt1;

public MyThread(String str) {
txt1 = str;
}

@Override
public void run() {
//定义消息
Message msg = new Message();
msg.what = 0x11;
Bundle bundle = new Bundle();
bundle.clear();
try {
//连接服务器 并设置连接超时为5秒
socket = new Socket();
//InetSocketAddress(服务端的ip地址,端口号) ip地址和端口号必须要与服务器端的对应,否侧则会提示连接失败。
socket.connect(new InetSocketAddress("192.168.1.35", 34562), 5000);
//获取输入输出流,获取服务端返回回来的信息的输入流。
OutputStream ou = socket.getOutputStream();
BufferedReader bff = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
//读取发来服务器信息
String line = null;
buffer="";
while ((line = bff.readLine()) != null) {
buffer = line + buffer;
}

//向服务器发送信息
ou.write("android 客户端".getBytes("gbk"));
ou.flush();
bundle.putString("msg", buffer.toString());
msg.setData(bundle);
//发送消息 修改UI线程中的组件
myHandler.sendMessage(msg);
//关闭各种输入输出流
bff.close();
ou.close();
socket.close();
} catch (SocketTimeoutException aa) {
//连接超时 在UI界面显示消息
bundle.putString("msg", "服务器连接失败!请检查网络是否打开");
msg.setData(bundle);
//发送消息 修改UI线程中的组件
myHandler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}


服务端主要代码:

public class AndroidRunable implements Runnable {

Socket socket = null;

public AndroidRunable(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
// 向android客户端输出hello worild
String line = null;
InputStream input;
OutputStream output;
String str = "hello world!";
try {
//向客户端发送信息
output = socket.getOutputStream();
input = socket.getInputStream();
BufferedReader bff = new BufferedReader(
new InputStreamReader(input));
output.write(str.getBytes("gbk"));
output.flush();
//半关闭socket
socket.shutdownOutput();
//获取客户端的信息
while ((line = bff.readLine()) != null) {
System.out.print(line);
}
//关闭输入输出流
output.close();
bff.close();
input.close();
socket.close();

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

}
}


个人在写的过程中,遇到的错误:



提示错误:

java.net.ConnectException: failed to connect to /192.168.1.1 (port 34562) after 5000ms: isConnected failed: ECONNREFUSED (Connection refused)

Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)

最后找的的原因,就是因为连接服务端的ip地址写错了。报错的错误是连接被拒绝,肯定第一时间在找服务端的问题,其实是客户端有问题。

代码是很简单的,如果如果想运行完整的代码,点击链接下载:
http://download.csdn.net/detail/lanxingfeifei/9818153
下载完代码,一定要记得更改程序中端口号和IP地址,否则会出现一些错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android socket