1、官方 Socket 文件(Client 端用來與 Server 連線的 Socket)
2、官方 ServerSocket 文件(Server 端用來接受 Client 端連線的 Socket)
Client 端的語法:
InetAddress addressOfServer = InetAddress.getByName("127.0.0.1");
int portOfServer = 22;
// File to be transmitted
File file = new File("/home/user/test.img");
// Create buffer
byte[] buffer = new byte[2048];
int bytesReaded;
// Socket connection for connecting to the server
Socket socketFromClient = null;
// Output stream for transmitting file to the server
DataOutputStream outputStream = null;
// Input stream for reading local file
FileInputStream fis = null;
try {
  // Create socket
  socketFromClient = new Socket(addressOfServer, portOfServer);
  // Create output stream for transmitting file
  outputStream = new DataOutputStream(socketFromClient.getOutputStream());
  // Create input Stream for reading file
  FileInputStream fis = new FileInputStream(file);
  // Start transmitting
  while( (bytesReaded = fis.read(buffer)) > -1 ) {
    outputStream.write(buffer, 0, bytesReaded);
    outputStream.flush();
  }
} finally {
  // Close the stream objects
  if(outputStream != null) outputStream.close();
  if(fis != null) fis.close();
}
// Close the connection of socket
if(socketFromClient != null) socketFromClient.close();
Server 端語法:
int portOfServer = 22;
// Start listening to port 22
ServerSocket serverSocket = new ServerSocket(serverPort);
Socket clientSocket = serverSocket.accept();
// Reader for accepting the transmission from client
BufferedInputStream bis = null;
DataInputStream dis = null;
// File writer for writing the file transmitted from the client
File writtenFile = null;
FileWriter fw = null;
BufferedWriter bw = null;
try {
  // Get the address of the connecting client
  String addressOfClient = clientSocket.getRemoteSocketAddress().toString();
  // Get the stream which the client tranmits
  bis = new BufferedInputStream(clientSocket.getInputStream());
  dis = new DataInputStream(bis);
  // Create file writer
  writtenFile = new File("transmittedFile");
  fw = new FileWriter(writtenFile);
  bw = new BufferedWriter(fw);
  // Create buffer
  byte[] buffer = new byte[2048];
  int bytesReaded;
  // Accept and write the file
  while( (bytesReaded = dis.read(buffer)) > -1) {
    bw.write(buffer, 0, bytesReaded);
    bw.flush();
  }
}finally {
  // Close the stream and writer objects
  if(bw != null) bw.close();
  if(fw != null) fw.close();
  if(dis != null) dis.close();
  if(bis != null) bis.close();
}
如果只是要傳送字串資料,而不是傳送檔案的話,作法好像是一樣的,可以參考以下的連結。
參考資料:
3、簡單的Socket Client Server
沒有留言:
張貼留言