首先是服务端代码,
public class MyServer {
private static String TAG = "--MyServer";
private int post = 9005;
public static void main(String[] args) {
//创建线程池
ExecutorService es = Executors.newCachedThreadPool();
try {
System.out.println(TAG + "开始运行server");
final ServerSocket serverSocket = new ServerSocket(9005);
while (true) {
//accept是线程阻塞的
final Socket accept = serverSocket.accept();
es.execute(new Runnable() {
@Override
public void run() {
try {
InputStream inputStream = accept.getInputStream();
InputStreamReader ir = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(ir);
String info = null;
int index;
while ((info = br.readLine()) != null) {
System.out.println(TAG + "服务端接收info: " + info);
if ((index = info.indexOf("eof")) != -1) {
break;
}
}
//accept.shutdownInput(); 不能关闭,关闭就不能再接收消息了
//响应客户端
OutputStream outputStream = accept.getOutputStream();
PrintWriter pw = new PrintWriter(outputStream);
pw.write("你成功吸引了我的注意力");
pw.flush();
outputStream.close();
pw.close();
br.close();
inputStream.close();
ir.close();
accept.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务端的右键run就可以跑起来,然后是客户端的代码:
public class ClientActivity extends AppCompatActivity {
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String info = (String) msg.obj;
mTextView.setText("服务端返回:" + info);
}
};
private EditText mEditText;
private TextView mTextView;
private Socket mSocket;
private Button btn_send;
//创建线程池
ExecutorService mExecutorService = Executors.newCachedThreadPool();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ca);
mEditText = (EditText) findViewById(R.id.et_content);
mTextView = (TextView) findViewById(R.id.tv_message);
btn_send = (Button) findViewById(R.id.btn_send);
//连接服务端,ip换成自己电脑的ip,服务器设置的端口。
mExecutorService.execute(new Runnable() {
@Override
public void run() {
try {
mSocket = new Socket("192.168.1.102", 9005);
} catch (IOException e) {
e.printStackTrace();
}
}
});
//发送输入框的内容
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = mEditText.getText().toString();
send(s);
}
});
}
private void send(final String info) {
mExecutorService.execute(new Runnable() {
@Override
public void run() {
try {
mSocket = new Socket("192.168.1.102", 9005);
OutputStream os = mSocket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write(info);
pw.write("eof\n");
pw.flush();
InputStream inputStream = mSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String info = null;
int index;
while ((info = br.readLine()) != null) {
if ((index = info.indexOf("eof")) != -1) {
break;
}
Message message = Message.obtain();
message.obj = info.substring(0, info.length()-3);
mHandler.sendMessage(message);
}
inputStream.close();
br.close();
os.close();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
是的就2个类,就可以发消息给服务端了。