java Socket Tcp示例三則(服務端處理資料、上傳檔案)

劍握在手發表於2013-11-26

示例一:

package cn.itcast.net.p5.tcptest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TransClient {

 /**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {

  /*
   * 思路:
   * 客戶端:
   * 1,需要先有socket端點。
   * 2,客戶端的資料來源:鍵盤。
   * 3,客戶端的目的:socket.
   * 4,接收服務端的資料,源:socket。
   * 5,將資料顯示在列印出來:目的:控制檯.
   * 6,在這些流中操作的資料,都是文字資料。
   *
   *
   * 轉換客戶端:
   * 1,建立socket客戶端物件。
   * 2,獲取鍵盤錄入。
   * 3,將錄入的資訊傳送給socket輸出流。
   */
  
  //1,建立socket客戶端物件。
  Socket s = new Socket("192.168.1.100",10004);
  
  //2,獲取鍵盤錄入。
  BufferedReader bufr  =
    new BufferedReader(new InputStreamReader(System.in));
  
  //3,socket輸出流。
//  new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  
  //4,socket輸入流,讀取服務端返回的大寫資料
  BufferedReader bufIn  = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  String line = null;
  
  while((line=bufr.readLine())!=null){
   
   if("over".equals(line))
    break;
   
//   out.print(line+"\r\n");
//   out.flush();
   out.println(line);
   
   //讀取服務端發回的一行大寫數。
   String upperStr = bufIn.readLine();
   System.out.println(upperStr);
  }
  
  s.close();
  
 }

}

 

 

package cn.itcast.net.p5.tcptest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TransServer {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {

  /*
   *
   * 轉換服務端。
   * 分析:
   * 1,serversocket服務。
   * 2,獲取socket物件。
   * 3,源:socket,讀取客戶端發過來的需要轉換的資料。
   * 4,目的:顯示在控制檯上。
   * 5,將資料轉成大寫發給客戶端。
   */
  
  //1,
  ServerSocket ss = new ServerSocket(10004);
  
  //2,獲取socket物件。
  Socket s = ss.accept();
  
  //獲取ip.
  String ip = s.getInetAddress().getHostAddress();
  System.out.println(ip+"......connected");
  
  //3,獲取socket讀取流,並裝飾。
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  //4,獲取socket的輸出流,並裝飾。
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  String line = null;
  while((line=bufIn.readLine())!=null){
   
   System.out.println(line);
   out.println(line.toUpperCase());
//   out.print(line.toUpperCase()+"\r\n");
//   out.flush();
  }
  
  s.close();
  ss.close();
  
 }

}

 

 

示例二:

package cn.itcast.net.p6.uploadtext;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadClient {

 /**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {

  System.out.println("上傳客戶端。。。。。。");
  
  File file = new File("c:\\client.txt");
  System.out.println(file.exists());
  
  
  //1
  Socket s = new Socket("192.168.1.100",10005);
  
  //2
  BufferedReader bufr =
    new BufferedReader(new FileReader(file));
  
  //3,
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  
  String line = null;
  while((line=bufr.readLine())!=null){
   
   out.println(line);
  }
  
  //告訴服務端,客戶端寫完了。
  s.shutdownOutput();
//  out.println("!@#$%^&*(");
  
  //4,
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  String str = bufIn.readLine();
  System.out.println(str);
  
  bufr.close();
  s.close();
  
 }

}

 

 

package cn.itcast.net.p6.uploadtext;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadServer {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  System.out.println("上傳服務端。。。。。。。。。");
  
  //1
  ServerSocket ss = new ServerSocket(10005);
  
  //2,
  Socket s = ss.accept();
  
  System.out.println(s.getInetAddress().getHostAddress()+".....connected");
  
  //3,
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  //4,
  BufferedWriter bufw = new BufferedWriter(new FileWriter("c:\\server.txt"));
  
  String line = null;
  
  while((line=bufIn.readLine())!=null){
   
//   if("over".equals(line))
//    break;
   bufw.write(line);
   bufw.newLine();
   bufw.flush();
  }
  
  
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  out.println("上傳成功");
  
  bufw.close();
  
  s.close();
  ss.close();
  
  
 }

}

 

示例三:

package cn.itcast.net.p1.uploadpic;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadPicClient {

 /**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {

  
  //1,建立客戶端socket。
  Socket s = new Socket("192.168.1.100",10006);
  
  //2,讀取客戶端要上傳的圖片檔案。
  FileInputStream fis = new FileInputStream("c:\\0.bmp");
  
  //3,獲取socket輸出流,將讀到圖片資料傳送給服務端。
  OutputStream out = s.getOutputStream();
  
  byte[] buf = new byte[1024];
  
  int len = 0;
  
  while((len=fis.read(buf))!=-1){
   out.write(buf,0,len);
  }
  
  //告訴服務端說:這邊的資料傳送完畢。讓服務端停止讀取。
  s.shutdownOutput();
  
  
  //讀取服務端發回的內容。   
  InputStream in  = s.getInputStream();
  byte[] bufIn = new byte[1024];
  
  int lenIn = in.read(buf);
  String text = new String(buf,0,lenIn);
  System.out.println(text);
  
  fis.close();
  s.close();
  
  
  
  
 }

}

 

package cn.itcast.net.p1.uploadpic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadPicServer {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
   
  //建立tcp的socket服務端。
  ServerSocket ss = new ServerSocket(10006);
  
  while(true){
   Socket s = ss.accept();   
   
   new Thread(new UploadTask(s)).start();  
   
  }
  //獲取客戶端。
  
  
//  ss.close();
  
  
 }

}

 

package cn.itcast.net.p1.uploadpic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class UploadTask implements Runnable {

 private static final int SIZE = 1024*1024*2;
 private Socket s;

 public  UploadTask(Socket s) {
  this.s = s;
 }

 @Override
 public void run() {

  int count = 0;
  String ip = s.getInetAddress().getHostAddress();
  System.out.println(ip + ".....connected");
  
  try{

  // 讀取客戶端發來的資料。
  InputStream in = s.getInputStream();

  // 將讀取到資料儲存到一個檔案中。
  File dir = new File("c:\\pic");
  if (!dir.exists()) {
   dir.mkdirs();
  }
  File file = new File(dir, ip + ".jpg");
  //如果檔案已經存在於服務端
  while(file.exists()){
   file = new File(dir,ip+"("+(++count)+").jpg");
  }
  
  
  FileOutputStream fos = new FileOutputStream(file);

  byte[] buf = new byte[1024];

  int len = 0;

  while ((len = in.read(buf)) != -1) {
   
   
   
   fos.write(buf, 0, len);
   
   if(file.length()>SIZE){
    System.out.println(ip+"檔案體積過大");
    
    fos.close();
    s.close();
    
    
    System.out.println(ip+"...."+file.delete());
    
    return ;
   }
  }

  // 獲取socket輸出流,將上傳成功字樣發給客戶端。
  OutputStream out = s.getOutputStream();
  out.write("上傳成功".getBytes());

  fos.close();
  s.close();
  }catch(IOException e){
   
  }

 }

}

相關文章