SocketClient
package com.zhidi.socketclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private final static String IP="192.168.2.3";
private final static int PORT=8888;
private TextView tv_msg;
private Button bt_get;
String result="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_msg = (TextView) findViewById(R.id.tv_msg);
bt_get = (Button) findViewById(R.id.bt_get);
bt_get.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//4、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//5、读取结果,更新UI。
tv_msg.setText(result);
}
}
};
// 启动线程来执行任务
new Thread() {
public void run() {
//请求网络
getMsg(IP, PORT);
Message m = new Message();
m.what = 1;
// 发送消息到Handler
handler.sendMessage(m);
}
}.start();
}
});
}
/**
* 从服务器读取返回消息
* @param dstName 服务器ip地址
* @param dstPort 服务器端口
*/
private void getMsg(String dstName, int dstPort){
try {
//1、创建Socket,指定服务器地址和端口号。
Socket socket = new Socket(dstName, dstPort);
socket.setSoTimeout(10000); //设置10秒之后即认为是超时
//2、从Socket里获取InputStream,使用InputStreamReader读取,装载进BufferedReader读取。
BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
result += buffer.readLine()+"\n";
//3、关闭流,关闭Socket。
buffer.close();
socket.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
SocketService
package com.zdsoft;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyService {
public static void main(String[] args) throws IOException {
System.out.println("服务器端启动.......");
//1、创建一个ServerSocket,用于监听客户端socket的连接请求 。
ServerSocket serivce=new ServerSocket(8888);
//2、采用循环不断接受来自客户端的请求,服务器端也对应产生一个Socket。
while(true){
//3、接收客户端请求。
Socket socket = serivce.accept();
System.out.println("客户端ip:"+socket.getInetAddress()+"\n");
//4、创建输出流,向客户端发消息。
OutputStream os=socket.getOutputStream();
os.write("你好,这是智递科技服务器端。".getBytes("utf-8"));
//5、关闭流,关闭Socket。
os.close();
socket.close();
}
}
}