Java網路程式設計(一)
今天主要用java寫了一個傳送訊息和傳送檔案的一個程式。其實實際上還是和java的io打交道。大家要明白的是,socket也是一種檔案描述符。學過unix的童鞋應該都知道,網路程式設計從管道,雙向管道,通道,到socket通訊,其實還是通過檔案描述符來玩位元組和字元。所以大家要把java io方面的東西弄清楚。
貼程式:
伺服器端:
import java.io.*;
import java.net.*;
class Server{
public static void main(String[] args){
try{
ServerSocket server = new ServerSocket(8088);
Socket client = server.accept();
DataInputStream datastream = new DataInputStream(client.getInputStream());
System.out.println(datastream.readUTF());
DataOutputStream datastream2 = new DataOutputStream(client.getOutputStream());
datastream2.writeUTF("cao");
// datastream2.flush();
datastream2.writeUTF("ni");
// datastream2.flush();
datastream2.writeUTF("ma");
File file = new File("C:\\Users\\Yelbosh\\Desktop\\box2d.pdf");
byte[] tem = new byte[1024];
int progress = 0;
long size = file.length();
datastream2.writeLong(size);
FileInputStream input = new FileInputStream(file);
while(progress < size){
int curr = input.read(tem);
datastream2.write(tem);
progress += curr;
System.out.println(progress);
}
server.close();
client.close();
}catch(Exception e){
System.out.println(e);
}
}
}
客戶端:
import java.io.*;
import java.net.*;
class Client{
public static void main(String[] args){
try{
Socket socket = new Socket("localhost",8088);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
dos.writeUTF("I'm clients!!");
System.out.println(dis.readUTF());
System.out.println(dis.readUTF());
System.out.println(dis.readUTF());
File file = new File("C:\\Users\\Yelbosh\\Desktop\\box2d22222.pdf");
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
long size = dis.readLong();
int progress = 0;
byte[] tem = new byte[1024];
int x;
while((x = dis.read(tem)) != -1){
ostream.write(tem);
progress += x;
System.out.println(progress);
}
socket.close();
}catch(Exception e){
System.out.println(e);
}
}
}
注意serversocket的receive方法。javadoc上說是這麼:
偵聽並接受到此套接字的連線。此方法在進行連線之前一直阻塞。
所以其內部實現其實是通過while迴圈來實現的。所以如果沒有客戶端連線的話那麼伺服器端會一直處於阻塞狀態而不會退出。
但是有一個地方我不太明白的是,如果客戶端分幾次在socket的outputstream中進行寫入的時候,為什麼不能從伺服器端一次性的讀出。我不知道這個內部的實現原理是什麼,歸根結底是因為io方面學得不夠紮實。弄清楚之後會告訴大家的。
相關文章
- Java的網路功能與程式設計 一 (轉)Java程式設計
- JAVA程式設計師怎麼樣才能進一線網際網路公司Java程式設計師
- Java中神經網路Triton GPU程式設計Java神經網路GPU程式設計
- Java 網路程式設計Java程式設計
- JAVA網路程式設計Java程式設計
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- Java 網路程式設計 —— 非阻塞式程式設計Java程式設計
- 網路通訊程式設計程式設計
- 網路協程程式設計程式設計
- Socket 程式設計 (網路篇)程式設計
- py網路工具程式設計程式設計
- java 網路程式設計01Java程式設計
- Java網路程式設計初探Java程式設計
- Java--網路程式設計Java程式設計
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- JAVA學習線路:day14-網路程式設計Java程式設計
- Python網路Socket程式設計Python程式設計
- Java實驗六: Java流式程式設計與網路程式設計(頭歌)Java程式設計
- python 網路篇(網路程式設計)Python程式設計
- JAVA網路程式設計基礎Java程式設計
- Java網路程式設計之UDPJava程式設計UDP
- Java網路程式設計4 (轉)Java程式設計
- Java 網路程式設計----初探ServletJava程式設計Servlet
- JAVA實現網路程式設計之併發程式設計Java程式設計
- Java程式設計師成長路徑Java程式設計師
- Java網路程式設計和NIO詳解3:IO模型與Java網路程式設計模型Java程式設計模型
- 一線網際網路常見的14個Java面試題,你顫抖了嗎程式設計師Java面試題程式設計師
- 網路程式設計-計算機網路三要素程式設計計算機網路
- 一個老程式設計師在網際網路寒冬下的感悟程式設計師
- java網路程式設計(TCP詳解)Java程式設計TCP
- 【狂神說Java】網路程式設計Java程式設計
- Java網路程式設計 全面理解BIOJava程式設計
- Java 網路程式設計 —— Socket 詳解Java程式設計
- Java 基礎(十六)網路程式設計Java程式設計
- JAVA NIO程式設計入門(一)Java程式設計
- Java網路程式設計:QQ郵件傳送客戶端程式設計Java程式設計客戶端
- Java高階程式設計筆記 • 【第4章 網路程式設計】Java程式設計筆記