import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class TestActivity extends BaseActivity {
@BindView(R.id.btn_send)
Button btnSend;
@BindView(R.id.btn_wait)
Button btnWait;
@BindView(R.id.tv_data)
TextView tvData;
private MainHandle mMainHandle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ButterKnife.bind(this);
mMainHandle = new MainHandle();
}
@OnClick({R.id.btn_send, R.id.btn_wait})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_send:
sendMsg();
break;
case R.id.btn_wait:
new Thread(new Runnable() {
@Override
public void run() {
waitMsg();
}
}).start();
break;
}
}
private String sLog = "";
private void sendMsg() {
try {
final DatagramSocket hostSocket = new DatagramSocket();
// 设置接收超时时间
hostSocket.setSoTimeout(1500);
final String sendData = "my name is zzz";
InetAddress broadIP = InetAddress.getByName("255.255.255.255");
final DatagramPacket sendPack = new DatagramPacket(sendData.getBytes(), sendData.length(), broadIP, 9901);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
String log = sendData + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\n";
Log.v("tag", Thread.currentThread() + log);
if (sLog.split("\n").length > 10) {
sLog = "";
}
try {
hostSocket.send(sendPack);
sLog += log;
runOnUiThread(new Runnable() {
@Override
public void run() {
tvData.setText(sLog);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}, 0, 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
private String rLog = "";
private void waitMsg() {
byte[] buffer = new byte[1024];
/*在这里同样使用约定好的端口*/
int port = 9901;
DatagramSocket server = null;
try {
server = new DatagramSocket(port);
final DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
// 等待主机的搜索
try {
server.receive(packet);
final String s = new String(packet.getData(), 0, packet.getLength(), "UTF-8");
String log = packet.getAddress() + ",port:" + packet.getPort() + "," + s + "\n";
Log.v("tag", log);
rLog += log;
if (rLog.split("\n").length > 10) {
rLog = "";
}
mMainHandle.sendEmptyMessage(1);
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (SocketException e) {
e.printStackTrace();
} finally {
if (server != null)
server.close();
}
}
class MainHandle extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
tvData.setText(rLog);
}
}
写在最后
在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。
如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!
加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!