Android之Socket通信
16lz
2021-01-25
马上就要中秋了,7+3=8有点伤不起啊,一直感到很颓废,这两个月也没有怎么更新过博客,也不知道该怎么写,不知道写什么,最近一个小项目,需要用到socket通信,和C#客户端。,这种需求用到的不多,手机做Socket服务器,这种需求也用的不多。所以,就写点关于socket通信自己的一点心得吧!
第一点:别忘了在manifest文件里面加访问网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
第二点:启动服务器,进行监听
new Thread(new SocketServerRun()).start(); } class SocketServerRun implements Runnable {@Overridepublic void run() {try {ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);while (true) {Socket s = ss.accept();br = new BufferedReader(new InputStreamReader(s.getInputStream() , "utf-8"));String strContent;if ((strContent = br.readLine()) != null ) {Message message = new Message(); message.obj = strContent; mHandler.sendMessage(message);} br.close(); s.close();}} catch (IOException e) {e.printStackTrace();}} }
启动一个线程进行监听,不要在主线程(UI线程)进行网络操作,你知道的,有时候如果网络不好或者其他原因造成5秒的阻塞,那就ANR了。
ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);启动一个ServerSocket监听一个端口号:如666、5558等等。
然后使用ServerSocket的accept()方法,该方法使server端程序一直处于等待状态,直到捕获到一个来自Client端的请求,然后返回用于和改Client通信的Socket对象s。直到server程序关闭,Client和Server端就可以进行读写操作了。在上面的代码中,只进行了写入操作。当然,也可以用以下语句进行写出操作:
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(), "utf-8")),true); out.println(str);
这是服务器端,客户端呢,相对来说更简单:
Socket socket = null;String message = mEditText.getText().toString() + "\r\n"; try {//创建Socketsocket = new Socket("192.168.1.16", 8091); //向服务器发送消息PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); out.println(message); //接收来自服务器的消息BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String msg = br.readLine();
创建Socket,通过IP地址和端口号对服务器端建立连接。然后进行通信。
第三点:关闭资源
像创建的BufferedReader、PrintWriter、包括socket这些资源,一定要记得关闭。
//关闭流out.close();br.close();//关闭Socketsocket.close();
` 好吧,今天就写到这吧。
更多相关文章
- 万字长文带你了解最常用的开源 Squid 代理服务器
- Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- Android推送通知的实现--采用MQTT协议实现Android消息推送
- Android(安卓)系统Handler用法简介
- u3d与android通信1
- android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原
- Android拾萃 - RxJava5种响应类型的区别和背压(三)
- Android客户端与服务器之间的通信