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

本文介绍如何使用 Java 的 Socket 和 ServerSocket 类实现一个简单的聊天室应用。通过创建 ServerSocket 监听特定端口,接收来自客户端的 Socket 连接请求,并通过多线程处理客户端之间的消息传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 进行测试




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值