客戶端怎麼給指定的客戶端發送消息,我如今是隻要客戶端發動的消息,鏈接的全部客戶端均可以收到,換一種問法,也就是怎麼給指定的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線程