关于一对一直播视频聊天系统android部分介绍

客户端怎么给指定的客户端发送消息,我如今是只要客户端发动的消息,链接的全部客户端均可以收到,换一种问法,也就是怎么给指定的Socket发送消息(怎么给Socket进行惟一的标识) 个人android代码就不写了,就是普通的发送消息和接收消息 下面是我服务端代码 public class SocketListener extends Thread { Socket s; // 该线程所处理的Socket所对应的输入流 BufferedReader br = null; // 定义保存全部Socket的ArrayList public static ArrayList socketList = new ArrayList(); public static ArrayList useridList=new ArrayList(); @Override public void run() {  System.out.print("Socket线程启动成功"); try{ ServerSocket ss = new ServerSocket(30000); while(true) { // 此行代码会阻塞,将一直等待别人的链接 s = ss.accept(); socketList.add(s); // 每当客户端链接后启动一条ServerThread线程为该客户端服务 new Thread(new ServerThread(s)).start(); } }catch (IOException e) { System.out.println("客户端链接出错"); }java

} // 定义读取客户端数据的方法 private String readFromClient() {android

try
{
    return br.readLine();
}
// 若是捕捉到异常,代表该Socket对应的客户端已经关闭
catch (IOException e)
{
    e.printStackTrace();
    // 删除该Socket。
    SocketListener.socketList.remove(s);  // ①
}
return null;
复制代码

} } package socket; import java.io.; import java.net.; import java.util.*; // 负责处理每一个线程通讯的线程类 public class ServerThread implements Runnable { // 定义当前线程所处理的Socket Socket s = null; // 该线程所处理的Socket所对应的输入流 BufferedReader br = null; public ServerThread(Socket s) throws IOException { this.s = s; // 初始化该Socket对应的输入流 br = new BufferedReader(new InputStreamReader( s.getInputStream() , "utf-8")); // ② } public void run() { try { String content = null; // 采用循环不断从Socket中读取客户端发送过来的数据 while ((content = readFromClient()) != null) { System.out.println(s.getInetAddress()+":"+content);socket

int begin = content.indexOf("<");ide

int end = content.indexOf(">");this

if (begin > -1 && end > -1) {spa

String name = content.substring(begin, end + 1);  System.out.println("将要发送给:"+name); String message=content.substring(end+1); // 遍历socketList中的每一个Socket,将读到的内容向每一个Socket发送一次 for (Iterator it = SocketListener.socketList.iterator(); it.hasNext(); ) { Socket s = it.next(); try{ OutputStream os = s.getOutputStream(); os.write((message + "\n").getBytes("utf-8")); } catch(SocketException e) { System.out.print("转发出错"); e.printStackTrace(); // 删除该Socket。 it.remove(); System.out.println(SocketListener.socketList); } } } }

}
catch (IOException e)
{
    e.printStackTrace();
}
复制代码

} // 定义读取客户端数据的方法 private String readFromClient() { try { return br.readLine(); } // 若是捕捉到异常,代表该Socket对应的客户端已经关闭 catch (IOException e) { e.printStackTrace(); // 删除该Socket。 SocketListener.socketList.remove(s); // ① } return null;.net

布谷直播科技 技术QQ2048365976 vx:15753857573线程

相关文章
相关标签/搜索