001.【笔记】android socket 初步认识

来源:互联网 发布:mac磁盘清理软件排名 编辑:程序博客网 时间:2024/06/05 09:08

socket 又称套接字


socket 和ServerSocket都在java.net包中,ServerSocket 用于服务端, socket通信是平等的

过程:

  1.服务器监听

2.客户端发出请求

3.建立链接

4.通讯

特点:

1.socket基于Tcp链接,数据传输有保障;

2.适用于长时间链接

3.通常应用于即时通讯

-------------------------------------------------------------------------------------------------------------

使用:

//ServerListener.java 

package com.zlw.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.Socket;public class ChatSocket extends Thread {Socket socket;public ChatSocket(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {// 读取内容BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));String line = null;while ((line = br.readLine()) != null) {ChatManager.getChatManager().publish(this, line);}br.close();} catch (UnsupportedEncodingException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}}public void out(String s) {try {socket.getOutputStream().write(s.getBytes("utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

<pre name="code" class="java">//ServerListener.java

package com.zlw.socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JOptionPane;public class ServerListener extends Thread {@Overridepublic void run() {// 1-65535之间Socket socket;try {ServerSocket serverSocket = new ServerSocket(12345);while (true) {// 进行阻塞线程(应当在子线程执行),进行监听12345端口socket = serverSocket.accept();// 当访问端口时取消阻塞,显示信息JOptionPane.showMessageDialog(null, "有客户端连接到12345端口!");// 将socket传递给新线程ChatSocket chatSocket = new ChatSocket(socket);chatSocket.start();ChatManager.getChatManager().add(chatSocket);}} catch (IOException e) {e.printStackTrace();}}}
<pre name="code" class="java">//ChatManager 管理所有的Socket
package com.zlw.socket;import java.util.Vector;public class ChatManager {private ChatManager() {}private static final ChatManager chatSocket = new ChatManager();public static ChatManager getChatManager() {return chatSocket;}// 集合Vector<ChatSocket> vector = new Vector<ChatSocket>();public void add(ChatSocket chatSocket) {vector.add(chatSocket);}/** * 集体发送 *  * @author zlw QQ:739043667 * @param * @return */public void publish(ChatSocket chatSocket, String out) {for (int i = 0; i < vector.size(); i++) {ChatSocket cs = vector.get(i);if (!cs.equals(chatSocket)) {cs.out(out);}}}}


测试:

在命令行中 敲入 :  telnet localhost 12345 进行测试




0 0
原创粉丝点击