❶ java socket 服務端接收數據阻塞。
伺服器端處理的太慢了吧?
❷ Java socket接收緩存中多行數據數據的讀取問題
先用輸入流InputStream將文件內容讀取到位元組數組(長碰圓叢度為 1024)中笑櫻,再用輸出流OutputStream將位元組數組中的數據寫到目標設備
public void write(byte[] buffer, int offset, int count)
該方法第一個參數為:位元組數組
第二個是:要寫入的數據在數組中的起始位置腔燃 即:0
第三個是:寫入的長度,即:1024
❸ java socket發送和接收多條數據的情況怎麼解決
只要是接收端
你都應該不停的等待消息
,接受消息的那一段可以這樣寫
while(true)
{
try{
Thread.sleep(300);}catch(Excepion
e){}
//注意這里的inStream是DataInputStream
當然你也可以加以裝飾
String
message=
inStream.readUTF();
if(message!=null)
{
System.out.println("收到消息:"+message);
}
}
只有這樣才能不斷從發送端收到消息,這段代碼只是給你一敏扒個提示,有問題咐拿知衡消給我留言,通常為了程序的合理性
最好把這段代碼寫進一個線程裡面,這樣更合理
❹ java中socket不斷接收數據問題
其實,方法有幾個。
方法一:
定義一個MsgObject的消息類,裡面存放的為發送的消息內容猜激(記得序列化)。然後再用ObjectOutputStream來把該類弄成一個輸出流發送褲攜出去。然後客戶端就用
ObjectInputStream in=new ObjectInputStream(socket.getInputStream());
MsgObject obj=(MsgObject)in.getObject();就能夠得到一個消息類對象了。。
不會的就追問下,我之前是這樣做過的。
方法二:
如果你會json格式,那麼就更加簡單了,直接把你的消息放到json數組裡面。。
這種方法沒試過,我近期使用json過於頻繁才突然記得的,如果你有興趣用這個方法,可以一起討論下。
方法三:
弄多個輸入輸出流,但胡兆伏是這個不建議
❺ java的serversocket怎麼接受來自客戶端的數據
通過accept()獲取Socket,然後獲取IO流,這個是我寫的從客戶端亮者下載文件的客戶端代碼,代碼如下
ServerSocketserverSocket=newServerSocket(10002);
while(true){
Socketsocket=serverSocket.accept();
OutputStreamOutput=socket.getOutputStream();
FileInputStreaminput=newFileInputStream("F:\Play.mp4");
byte[]buf敬瞎薯=newbyte[1024];
intlength=0;
while((length神搜=input.read(buf))!=-1){
Output.write(buf,0,length);
}
Stringip=socket.getInetAddress().getHostAddress();
System.out.println(ip);
input.close();
socket.close();
}
❻ java socket技術 客戶端實現不發送請求給服務端但是一直接收服務端發來的數據
說點潑冷水的話題
首先確認什麼是客戶端,什麼是服務端。
從用戶的角度,可見的、可操作的即是客戶端,也就是你這里說的java開發的部分。而不可見的部分就是服務端,也就是你說的C部分。
而從網路開發的角度,發起請求的是客戶端,而接收請求的是服務端。這與用戶感受有很大區別。
當從java請求C的時候,java是客戶端,C 是服務端。而當C主動請求時,則C就變成了客戶端,而java 變成了服務端。
所以,從網路開發的角度,java想成為此次通信的服務端,必須長期維護一個埠可用,而C 要訪問這個埠。
而java為了能夠長期維護一個埠,一般採用socket 方式(其他方式也基本上都是基於socket的),由於java已經封裝的很好了,只要new Socket(IP,port) 就可以 獲得,同時,由於原來C 是伺服器,而如果沒有多個伺服器同時向java端發送請求的話,基本連線程處理都不需要做的。
❼ java的socket通信如何直接接收16進制數據
發送消息之前轉碼為16進制
Java code
public static final String encodeHex(String msg) {
byte[] bytes = null;
try {
bytes = msg.getBytes("GBK");
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuffer buff = new StringBuffer(bytes.length * 4);
String b;
char a;
int n = 0;
int m = 0;
for (int i = 0; i < bytes.length; i++) {
b = Integer.toHexString(bytes[i]);
if (bytes[i] > 0) {
buff.append("00");
buff.append(b);
n = n + 1;
} else {
a = msg.charAt((i - n) / 2 + n);
m = a;
b = Integer.toHexString(m);
buff.append(b.substring(0, 4));
i = i + 1;
}
}
return buff.toString();
}
❽ 請教大家JAVA——socket接收的數據(byte[])的處理
接收方法的問題
如果你發送一個長度11的字元串 而用一個長度為8的數組接收
第一次read沒問題 但第二次read時因為只接受了3個字元 而數組長度卻是8.結果就是除了前3個字元外剩下全部都是0 就出現了你的問題。
byte[] b = {0x11,0x22,0x33, 0x00, 0x00, 0x00, 0x00...}; -->length = 1024 後面都是0x00
就是因為隱唯態只接受了前3個字元 後邊數組實例的時候本身就是0
解決方法也比較容易
read(byte[] b)方法提供了一個返回的整數灶源用來山肢表示接受了多少個字元。
只要每次read時判斷下看看返回的數值和數組長度大小。如果接收小於數組長度在處理處理數據時把多餘的數據去掉。
❾ java socket發送多條、接收一條數據的情況怎麼解決
具體原因不大清楚,模好陸我想可能是這樣,你在每次進入循環都生成一個新的流對象,這個流對象在銷毀回收的時候可能對socket的輸出流產生了某種影響吧。
你可以這樣來做襪納啊
1. 使用StringBuilder,在循環裡面將所有字元串合成一個字元串,最後旦頃退出的時候生成一個輸出流輸出。
2. 在進入循環體前面使用
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket
.getOutputStream()));
只產生一個流對象,在循環裡面通過bw輸出
❿ 用JAVA寫一個SOCKET 接收TCP發來的消息
服務端監聽:ServerSocket server=new ServerSocket(port);//port:綁定的埠號
Socket client=server.accept()();//監聽埠,一旦取得連接則獲得客戶端的socket連接對象client
客戶端: Socket s=new Socket(ip,port);//要連接的伺服器的ip以及埠號
如果正常連接上之後,socket的對象可以獲得InputStream和OutputStreame,然後就可以進行通信了
完成通信之後,執行socket對象的close()方法關閉連接,完成一次完整的socket連接