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
测试:
在命令行中 敲入 : telnet localhost 12345 进行测试
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 进行测试
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- java socket 注意的地方
- java socket 注意的地方
- AS3自写类整理笔记 ClassLoader类第1/2页
- AS3自写类整理笔记 Dot类第1/2页
- DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .
- C#实现子窗体与父窗体通信方法实例总结
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- perl脚本学习指南--读书笔记
- java和c#使用hessian通信的方法
- 科学知识:理解socket
- 《C++ primer plus》读书笔记(三)
- win32下进程间通信(共享内存)实例分析
- 《C++ primer plus》读书笔记(二)