日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java服务器向客户端发消息_socket 服务器向指定的客户端发消息

發(fā)布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java服务器向客户端发消息_socket 服务器向指定的客户端发消息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.需求

需求如題. 當(dāng)多個客戶端連接服務(wù)器時,服務(wù)器如何給指定的客戶端發(fā)送消息.

二.解決方案

核心思想: 在服務(wù)器端,需保存不同客戶端的socket列表及客戶端相關(guān)信息.

socket含有發(fā)送方和接收方的ip和端口號,所以通過socket就能向指定的客戶端發(fā)送消息.

經(jīng)查閱資料,得到如下解決方案:

用戶連接時,立即向服務(wù)器發(fā)送自己的唯一ID,服務(wù)器端將ID和對應(yīng)的socket用map存儲. 向客戶端發(fā)送消息時,就可以通過ID,找到對應(yīng)的socket,然后向其發(fā)送消息.

如果客戶端ip固定,服務(wù)器每收到一個Socket都用Map

三.實踐

說明:采用第一種解決方案,模擬服務(wù)器向指定的客戶端發(fā)送消息.

服務(wù)端循環(huán)監(jiān)聽,第一個服務(wù)器進(jìn)來,向其發(fā)送其自身序號,第二個進(jìn)來,遍歷socke列表,向列表中的每一個客戶端發(fā)送其對應(yīng)的序號,從而達(dá)到服務(wù)器向指定客戶端發(fā)送消息的功能.

服務(wù)器端

package server;

import java.io.*;

import java.net.*;

import java.util.HashMap;/**

* 主函數(shù),實現(xiàn)服務(wù)器向指定客戶端發(fā)送消息的功能.

* 客戶端用python書寫

* @author dingding

**/

public classRun {private final static int PORT = 30000;public static HashMap socketList = new HashMap<>();public static String channelToken; //socket 令牌

private staticBufferedReader bufferedReader;public static voidmain(String[] args) {try{

ServerSocket server= newServerSocket(PORT);

System.out.println("server is listenning...");while(true){//不斷循環(huán)隨時等待新的客戶端接入服務(wù)器

Socket clientSocket =server.accept();

bufferedReader= new BufferedReader(newInputStreamReader(clientSocket.getInputStream()));

channelToken=bufferedReader.readLine();

socketList.put(channelToken,clientSocket);//保存會話ID和socket//System.out.println(socketList.get(channelToken));//System.out.println(socketList);

newServerThread(clientSocket,socketList);

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

package server;

import java.io.*;

import java.net.*;

import java.util.*;public classServerThread extends Thread{privateSocket client;private PrintWriter out;private HashMap clientList = new HashMap<>();public ServerThread(Socket socket,HashMapsocketList) throws IOException{

super();

client=socket;

clientList=socketList;

start();

}

@Overridepublic voidrun(){

Socket socket;

System.out.println("Client:"+getName()+"come in...");//每當(dāng)客戶端連接上,就向相應(yīng)的客戶端進(jìn)行回應(yīng)

Iterator> entries =clientList.entrySet().iterator();while(entries.hasNext()){

HashMap.Entry entry =entries.next();

System.out.println(entry.getKey());if (!String.valueOf(entry.getKey()).equals("")) {

System.out.println(entry.getValue());

System.out.println("-------------");

socket=entry.getValue();if (socket!=null) {try{out = new PrintWriter(socket.getOutputStream()); //回復(fù)client的ID

out.println(entry.getKey());out.flush();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

}

兩個客戶端用兩個python客戶端來模擬場景.

#coding = utf-8import socket

import threading

HOST= "localhost"PORT= 30000sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((HOST, PORT))

def test():

socketID= 'I am 111'sock.sendall((socketID+'\r').encode())whileTrue:

data= sock.recv(1024).decode()

print('from line:'+data)

sock.close()if __name__ == '__main__':

test()

#coding = utf-8import socket

import threading

HOST= "localhost"PORT= 30000sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((HOST, PORT))

def test():

socketID= 'I am 000'sock.sendall((socketID+'\r').encode())whileTrue:

data= sock.recv(1024).decode()

print('from line:'+data)

sock.close()if __name__ == '__main__':

test()

四.總結(jié)

socket 服務(wù)器向指定的客戶端發(fā)消息,網(wǎng)上給的資源不多,大多是關(guān)于服務(wù)器群發(fā). 這里給出了具體解決方案,并通過實例證實了該方案的可行性.

有時看的資料越多,越不明白.這并總是好事.

這個時候就需要靜下來理理思路,然后針對具體的解決方案,編程實現(xiàn).

實踐才是檢驗真理的唯一標(biāo)準(zhǔn),設(shè)計代碼的時候你就離成功又近了一步.

參考文獻(xiàn)

---------------------

作者:Deen12520

來源:CSDN

原文:https://blog.csdn.net/dingding_12345/article/details/72790839

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的java服务器向客户端发消息_socket 服务器向指定的客户端发消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。