導航:首頁 > 編程語言 > javasocket轉發

javasocket轉發

發布時間:2022-05-07 12:23:10

1. java高手請進,關於javasocket通信問題,為什麼Server伺服器不能轉發數據到Client,解決了再加分

這樣,你讓伺服器端,接到一個客戶端的socket,就開一個線程,每個客戶端在伺服器里都有一個自己的線程,這就不會造成多客戶端只有一個被響應了,但這種方法只適用於客戶端相對較少的情況。

2. java socket伺服器怎麼給所有客戶端發系統消息

package Server;
import java.io.*;
import java.net.*;

import message.MessageType;
//該線程用於和客服端進行通信,是一個線程類
public class extends Thread{
Socket s=null;
ObjectInputStream ois=null;
MessageType mt=null;
ObjectOutputStream oos=null;
public (Socket s){
this.s=s;
}
public void run(){
//不停地從socket裡面讀取數據
while(true){
try {
ois=new ObjectInputStream(s.getInputStream());
mt=(MessageType)ois.readObject();
System.out.println("伺服器讀取到的信息");
System.out.println(mt.getContent()+" "+mt.getGetter()+" "+
mt.getMessagetype()+mt.getSendTime());
//將讀取到的數據轉發給對應的客服端
System.out.println("從集合裡面可以找到用戶壓迫將數據發送給"+ ManageOnlineUser.hm.get(mt.getGetter()));
oos=new ObjectOutputStream(( ManageOnlineUser.hm.get(mt.getGetter())).getOutputStream());
oos.writeObject(mt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

3. java socket發送字元串

java中socket是向某個特定地址的埠發送流(字元串通過getBytes方法轉換成流)。

publicstaticvoidmain(String[]args){
Sockets;
try{
s=newSocket("localhost",9091);

DataOutputStreamout=newDataOutputStream(s.getOutputStream());
out.write("aslkjlksjdsad".getBytes());
out.flush();
out.close();
}catch(UnknownHostExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

備註:有發送的話,就需要相應的地址和埠上做一個接收的,來實現交互。

4. java socket 如何告訴第二個客戶端及後面的socket 已經有連接了

代理伺服器解析客戶端傳入的數據,得到伺服器ip和埠,然後創建與伺服器的連接。解析代碼如下:(這里只處理了socket v5的情況,Config的常量對應java.net.SocksConsts)
try {
// socket v5
// 4byte(5 2 0 2) @see java.net.SocksSocketImpl
int len = dis.read(buffer);
// reply client
dos.write(new byte[]{Config.PROTO_VERS, Config.NO_AUTH});
dos.flush();

// read
// PROTO_VERS(1byte)
// CONNECT(1byte)
// 0(1byte)
// DOMAIN_NAME/IPV4/IPV6(1byte) DOMAIN_NAME(not consider now)
// addr(IPV4:4byte/IPV6:16byte)
// port>>8&0xff(1byte)
// port&0xff(1byte)
len = dis.read(buffer);
byte addrType = buffer[3];
byte[] applyData = null;

String serverIp = null;
int serverPort = 0;
if (addrType == Config.IPV4) {
serverIp = Util.bytes2ipv4(buffer, 4, 4);
serverPort = buffer[8] << 8 | buffer[9];
// set reply data
applyData = new byte[10];
applyData[1] = Config.REQUEST_OK;
applyData[3] = Config.IPV4;
for (int i = 4; i < 10; i++) {
// fill ip, port
applyData[i] = buffer[i];
}
} else if (addrType == Config.IPV6) {
serverIp = Util.bytes2ipv6(buffer, 4, 16);
serverPort = buffer[20] << 8 | buffer[21];
// set reply data
applyData = new byte[6];
applyData[1] = Config.REQUEST_OK;
applyData[3] = Config.IPV6;
applyData[4] = buffer[20];
applyData[5] = buffer[21];
}
// reply
dos.write(applyData);
dos.flush();

// connect the server
// serverIp是伺服器ip,serverPort是伺服器埠,用這兩個
// 創建與伺服器的socket連接
Socket socket = new Socket(serverIp, serverPort);
// 之後處理客戶端與伺服器的數據交互就用這個socket轉發就行了

// finally success!!!
} catch (Exception e) {
e.printStackTrace();
}

5. Java socket 之服務端轉發消息

伺服器端一般會存儲所有會話信息(在啟動會話時),客戶端A發送信息給伺服器端 ,伺服器端進@OnMessage 方法,通過url傳參獲取發送對象。

調用代碼: 客戶端B的session .getBasicRemote().sendText("發送的信息");

6. JavaSocket網路編程怎麼實現不在同一個網路下通訊

如果你需要直接通訊,那麼這是網管的事。不通的網路是沒有辦法的。
不過如果大家都接了互聯網,那麼可以通過中間伺服器轉發的方式進行通訊。伺服器C在公網。那麼客戶端a連接C,客戶端b也連接C,就可以實現轉發。現在大規模的通訊基本都是這個方式。

7. 使用java socket怎麼能夠實現將一個客戶端發送到服務端的消息轉發到另一個客戶端

用一個集合記住所有客戶的Socket,收到數據包,就根據收發要求,轉發

8. java socket伺服器怎麼給客戶端發信息

伺服器端和客戶端都是通過SOCKET來進行通信的,首先產生一個
socket實例,通過這個實例,伺服器端調用accept這個方法接收來自客戶端發送的信息.但是在產生socket實例的時候必須初始化一個埠.用來負責接受客戶端的請求!
客戶端要給伺服器發送消息也必須產生一個socket實例,初始化的時候必須指定伺服器的IP地址,並且指定服務接收的埠號,這樣客戶端才能找到伺服器要接收的地方,找到地方就可以發送過去了。和你寫信一樣。找到地址
BufferedReader
in
=
new
BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter
out
=
new
PrintWriter(socket.getOutputStream());
BufferedReader
wt
=
new
BufferedReader(new
InputStreamReader(System.in));
這個只是用來獲取一個從鍵盤的一個流.傳送給伺服器端的數據都是通過流來表示的。意思是是鍵盤輸入的一個位元組轉化成字元流.並輸出或者寫入!

9. JAVA怎麼通過socket傳輸各種類型文件

IO
流的概念 什麼叫流?
管道 -
流的分類
位元組流 字元流
節點流 過濾流 (包裝流 處理流 功能流)
輸入流 輸出流
InputStream抽象類 所有位元組輸入流統一的父類
OutputStream抽象類 所有位元組輸出流統一的父類
FileInputStream節點流 能夠連接文件作為節點
int read() 無參read 一次讀取一個位元組 返回的就是位元組數據
int read(byte[] data)*
int read(byte[] data,int off,int len)
FileOutputStream
構造方法:File Stringboolean append
*:輸出流連接的文件會被自動創建出來 如果已存在那麼替換
*:但是輸出流連接的文件夾都不存在 直接Exception
write(int data)
write(byte[] data)
write(byte[] data,int off,int len)*
BufferedInputStream(節點輸入流[,緩沖空間大小])
BufferedOutputStream(節點輸出流[,緩沖空間大小])
*:它們是過濾流 包裝流 處理流 它們只能連接節點流 不能直接連文件
使用它們倆是為了提供緩沖空間 從而大幅度的提高每次讀寫的
吞吐量 從而提高效率
*:Buffered 意味著有緩沖空間 一定要清空緩沖區
flush();
close();
*:一定注意 你可以使用的依然是read方法來實現讀取 write 寫出
read() read(byte[] data,int off,int len)
write(int data) write(byte data,int off,int len)
DataInputStream
DataOutputStream
*:它們是過濾劉 包裝流 處理流 它們只能連接節點流 不能直接連文件
使用他們倆是為了提供讀寫基本數據類型內存原型的功能
readBoolean()readInt()readLong()
writeBoolean()writeInt()writeLong()
ObjectInputStream
ObjectOutputStream
*:它們是過濾劉 包裝流 處理流 它們只能連接節點流 不能直接連文件
使用他們倆是為了能夠提供對象持久化的功能
把Java當中不是基本數據類型的對象類型也能保存到文件中
implements Serializable
一個類型的對象如果想被持久化 那麼這個類型必須序列化
而且當中所有的屬性頁必須實現序列化介面
如果是個集合概念 那麼不但這個類型需要序列化
當中存放的任何一個元素都需要序列化
readObject()writeObject()
*:如果一個屬性不需要參與持久化 那麼可以直接把屬性定義
為 transient 短暫的 轉瞬即逝的
Reader抽象類 所有字元輸入流統一的父類
Writer抽象類 所有字元輸出流統一的父類
FileReader
int read() 無參read 一次讀取一個字元 返回的就是字元數據
int read(char[] data)
int read(char[] data,int off,int len)
FileWriter
*:輸出流連接的文件會被自動創建出來 如果已存在那麼替換
*:但是輸出流連接的文件夾都不存在 直接Exception
write(int data)
write(char[] data)
write(char[] data,int off,int len);
過濾流 包裝流 處理流
BufferedReader
String readLine() 一次讀取一行
字元串不能返回-1 返回null代表讀取結束
BufferedWriter
write(String str) 寫出字元串的方法
newLine() 寫出一個換行標識
PrintStreamSystem.out
PrintWriter
太有魅力了 太強大了
1.可以連接字元流也可以連接位元組流
2.可以當做節點流也可以當做過濾流
3.能夠指定自動清空緩沖 (流,true) autoFlush
4.可以指定字元集 字元編碼
5.一個println() = write()+newLine()
InputStreamReader
OutputStreamWriter
將原本的位元組流包裝轉換成字元流
RandomAccessFilesetLength();
Socket
伺服器 ServerSocket ss = new ServerSocket(7777);
while(true){
Socket s = ss.accept()
new XxxThread(s).start();
}
客戶端 Socket socket = new Socket(ip,port);
getInputStream();
getOutputStream();

閱讀全文

與javasocket轉發相關的資料

熱點內容
安卓機內存刪除怎麼恢復 瀏覽:329
Qt環境的編譯軟體放到linux 瀏覽:212
聯創列印系統怎麼連接伺服器 瀏覽:935
杭州行政命令 瀏覽:160
如何查找伺服器日誌 瀏覽:801
加密的鑰匙扣怎麼寫 瀏覽:579
文件夾更新不了怎麼辦 瀏覽:475
壓縮機指示燈亮是什麼原因 瀏覽:956
什麼app訂酒店半價 瀏覽:765
中老年解壓神器 瀏覽:243
訊飛語音ttsandroid 瀏覽:468
腰椎壓縮性骨折術後能坐車嗎 瀏覽:507
python類裝飾器參數 瀏覽:347
均線pdf微盤 瀏覽:791
女生喜歡玩的解壓游戲 瀏覽:442
支付寶暗號加密操作 瀏覽:133
柯潔在哪個app下圍棋 瀏覽:751
平板用什麼app看內在美 瀏覽:609
cad計算機命令 瀏覽:173
郵箱設置域名伺服器錯誤什麼意思 瀏覽:671