一個實例通過client端和server端通訊
客戶端通過TCP/IP傳輸資源文件,比如圖片,文字,音頻,視頻等.....
服務端接受到文件存入本地磁盤,返回接受到:“收到來自于"+s.getInetAddress().getHostName()+"的信息”
?
TestTCP3:
附源碼:
package com.ykw.net;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import org.junit.Test;
//TCP編程例三:從客戶端發送文件給服務端,服務端保存到本地。并返回"發送成功"給客戶端。并關閉相應的連接
public class TestTCP3 {
?? ?@Test
?? ?public void client()throws Exception{
?? ??? ?//1.創建Socket的對象
?? ??? ?Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9898);
?? ??? ?//2.從本地獲取一個文件發送給服務端
?? ??? ?OutputStream os = socket.getOutputStream();
?? ??? ?FileInputStream fis = new FileInputStream(new File("1.jpg"));
?? ??? ?byte[] b = new byte[1024];
?? ??? ?int len;
?? ??? ?while((len=fis.read(b))!=-1){
?? ??? ??? ?os.write(b,0,len);
?? ??? ?}
?? ??? ?socket.shutdownOutput();
?? ??? ?//3.接受來自于服務端的信息
?? ??? ?InputStream is = socket.getInputStream();
?? ??? ?byte[] b1 = new byte[1024];
?? ??? ?int len1;
?? ??? ?while((len1 = is.read(b1))!=-1){
?? ??? ??? ?String str = new String(b1,0,len1);
?? ??? ??? ?System.out.println(str);
?? ??? ?}
?? ??? ?//4.關閉相應的流和Socket對象
?? ??? ?is.close();
?? ??? ?os.close();
?? ??? ?fis.close();
?? ??? ?socket.close();
?? ?}
?? ?
?? ?@Test
?? ?public void server()throws Exception{
?? ??? ?//1.創建一個ServerSocket對象
?? ??? ?ServerSocket ss = new ServerSocket(9898);
?? ??? ?//2.調用其accept()方法,返回一個Socket對象
?? ??? ?Socket s = ss.accept();
?? ??? ?//3.將從客戶端發送過來的信息保存到本地
?? ??? ?InputStream is = s.getInputStream();
?? ??? ?FileOutputStream fos = new FileOutputStream(new File("D://5.jpg"));
?? ??? ?byte[] b = new byte[1024];
?? ??? ?int len;
?? ??? ?while((len = is.read(b))!=-1){
?? ??? ??? ?fos.write(b,0,len);
?? ??? ?}
?? ??? ?System.out.println("收到來自于"+s.getInetAddress().getHostAddress()+"的文件");
?? ??? ?//4.發送“接收成功”的信息反饋給客戶端
?? ??? ?OutputStream os = s.getOutputStream();
?? ??? ?os.write("您發送的圖片我已接收成功".getBytes());
?? ??? ?//5.關閉相應的流和Socket及ServerSocket的對象
?? ??? ?os.close();
?? ??? ?fos.close();
?? ??? ?is.close();
?? ??? ?s.close();
?? ??? ?ss.close();
?? ?}
}