【Android】基于Socket的即时聊天(群聊)

本文介绍了一个大四学生在秋招期间利用Socket开发的基于TCP的即时群聊工具。通过创建SocketServer和Socket,实现客户端与服务端的连接。在Android端,需要注意在非主线程中进行Socket操作,并使用ArrayList存储接收的Socket,通过线程接收和广播消息。文章还提到了遇到的挑战,如界面实现和心跳包问题。
摘要由CSDN通过智能技术生成

近来感觉秋招无望,学习Socket的时候,便做了个基于Socket的群聊工具;
先看看最终效果吧
这里写图片描述

这里写图片描述
这里写图片描述

项目GitHub通道(详细代码请自行copy)

如何利用Socket通信

socket又称为“套接字”,建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 ——来自百度百科

socket通信步骤(TCP)
1.建立SocketServer(服务端) 和 Socket (客户端)
2.打开两个端之间的输入输出流
3.进行读写操作
4.关闭socket与流

先来看第一步
SocketServer 与 Socket都是 java.net包里的,进行TCP通信的时候需要建立客户端与服务端。SocketServer 通过绑定端口(Port)来实现监听,而Socket则是指定服务端端口(Port)与地址(IP)。
下面来看一个简单的通信例子

//Server部分
ServerSocket server = new ServerSocket(6063);//实例化(传入端口号)
Socket s = server.accept();//调用accept接收socket
BufferedReader in = 
new BufferedReader(new InputStreamReader(s.getInputStream()));//获得socket的输入流(同样的,可以通过getOutput
Stream来获取输出流)
while((msg= in.readLine())!=null){
    System.out.println(msg);
    }
in.close();
s.close();


//Client
Socket s = new Socket("192.168.1.133",6063);//实例化Socket传入指定服务端地址和端口号
            System.out.println("客户端启动...");
            BufferedReader re = new BufferedReader(new InputStreamReader(System.in));//用输入流读取键盘的输入
            PrintWriter pw = new PrintWriter(s.getOutputStream(),true);//获取socket的输出流,第二个参数表示会自动flush
            String msg2;
            while(true){
                msg2 = re.readLine();
                pw.println(msg2);//输出(自动flush)
            }

这样我们就简单了实现了socket通信
当然要实现即时聊天并非这么几行就能搞定的。
即时聊天,重点在于流的控制,需要开辟多条线程去分别做不同的事情。
下面来本次项目的PC服务端代码

PCServer端代码


public class Server implements Runnable
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值