34、Android中基于Socket的网络通信(一)
2014-09-16 17:45
525 查看
Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求。
在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成需要的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过Socket类及其子类完成的。
1,服务器监听。
2,客户端发送请求。
3,建立连接。
4,通信。
【Socket特点】
1,Socket基于TCP连接,数据传输有保障。
2,Socket适用于建立长时间连接。
3,Socket编程通常应用于即时通讯。
[b]【注】MAC系统中,打开多个终端窗口, command + N 或者 command + T(TAB样式) 。[/b]
在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成需要的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过Socket类及其子类完成的。
1,服务器监听。
2,客户端发送请求。
3,建立连接。
4,通信。
【Socket特点】
1,Socket基于TCP连接,数据传输有保障。
2,Socket适用于建立长时间连接。
3,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() { try { ServerSocket serverSocket = new ServerSocket(12345); // 循环监听来自客户端的连接 while (true) { // block Socket socket = serverSocket.accept(); // 建立连接 JOptionPane.showMessageDialog(null, "有客户端连接到了本机的12345端口"); // 因为每个Socket都要与一个客户端进行通信。所以要另起一个新的线程。 // 将Socket传递给新的线程。 ChatSocket cs = new ChatSocket(socket); cs.start(); ChatManager.getChatManager().add(cs); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.Socket; /** * 因为每个Socket都要与一个客户端进行通信。所以要另起一个新的线程。 * 之间是相互独立的,它们之间不能进行数据沟通。 * @author dr * */ public class ChatSocket extends Thread { Socket socket; public ChatSocket(Socket s) { this.socket = s; } public void out(String out) { // 发送数据 try { socket.getOutputStream().write(out.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { // int count = 0; // while (true) { // count++; // out("loop+" + count); // try { // sleep(500); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } 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 e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
import java.util.Vector; /** * 管理新建的线程,实现它们之间的相互通信。 * @author dr */ public class ChatManager { // 单例化 private ChatManager() { } private static final ChatManager cm = new ChatManager(); public static ChatManager getChatManager() { return cm; } Vector<ChatSocket> vector = new Vector<ChatSocket>(); public void add(ChatSocket cs) { vector.add(cs); } /** * 其中的某个线程,可以通过调用这个函数,向其他的客户端发送信息 * * @param cs * 线程 * @param out * 输出的信息 */ public void publish(ChatSocket cs, String out) { // 发送给集合中所有的线程。 for (int i = 0; i < vector.size(); i++) { ChatSocket csChatSocket = vector.get(i); // 当前的线程就不用接收这条信息了。 if (!cs.equals(csChatSocket)) { csChatSocket.out(out); } } } }
/** 测试类 */ public class MyServerSocket { public static void main(String[] args) { // 终端运行测试:telnet localhost 12345; new ServerListener().start(); } }
[b]【注】MAC系统中,打开多个终端窗口, command + N 或者 command + T(TAB样式) 。[/b]
相关文章推荐
- Android网络编程实践之旅(二):基于Socket的网络通信
- Android中基于Socket的网络通信
- Android中基于TCP协议的网络通信之使用Socket进行通信
- Android中基于Socket的网络通信
- Android网络编程实践之旅(二):基于Socket的网络通信 .
- Android网络编程实践之旅(二):基于Socket的网络通信
- Android中网络通信基于HTTP、Socket
- Android中基于TCP协议的网络通信之使用Socket进行通信
- Android网络编程实践之旅(二):基于Socket的网络通信
- Android网络编程实践之旅(二):基于Socket的网络通信
- Android基于Socket的网络通信
- android中的网络通信(一) socket编程
- Android网络编程之Socket通信
- 基于tcp_socket通信的网络编程
- Java4Android之socket网络通信基础
- Android Socket网络通信
- Android基于Socket和Http的网络编程
- Android开发手记:Socket网络通信
- Android网络开发之Socket通信
- 一个基于VB.net的异步Socket网络TCP通信可防止任意一端意外终止TCP连接的类,。