您的位置:首页 > 移动开发 > Android开发

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

2016-04-07 00:02 363 查看
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;
}

@Override
public 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 {
@Override
public 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 进行测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  socket 笔记 通信