Java學習筆記53(網路編程:TCP協議案例),學習筆記tcp

來源:互聯網
上載者:User

Java學習筆記53(網路編程:TCP協議案例),學習筆記tcp

簡易的案例

用戶端:

package demo;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class TCPClient {    public static void main(String[] args) throws IOException {        Socket socket = new Socket("127.0.0.1", 7000);        OutputStream out = socket.getOutputStream();        out.write("hello".getBytes());        InputStream in = socket.getInputStream();        byte[] data = new byte[1024];        int len = in.read(data);        System.out.println(new String(data, 0, len));        socket.close();    }}
View Code

伺服器端:

package demo;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {    public static void main(String[] args) throws IOException {        ServerSocket server = new ServerSocket(7000);        Socket socket = server.accept();        InputStream in = socket.getInputStream();        byte[] data = new byte[1024];        int len = in.read(data);        System.out.println(new String(data, 0, len));        OutputStream out = socket.getOutputStream();        out.write("收到".getBytes());        socket.close();        server.close();    }}
View Code

先啟動伺服器端,再啟動用戶端,伺服器端列印:hello,然後用戶端列印:收到

注意區分這裡的流對象

 

接下來在這個案例基礎上做一個圖片上傳案例

圖片上傳的本質就是檔案複製

 

用戶端:

package demo1;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class TCPClient {    public static void main(String[] args) throws IOException {        Socket socket = new Socket("127.0.0.1", 7000);        OutputStream out = socket.getOutputStream();        FileInputStream fis = new FileInputStream("d:\\666.jpeg");        int len = 0;        byte[] bytes = new byte[1024];        while ((len = fis.read(bytes)) != -1) {            out.write(bytes, 0, len);        }        socket.shutdownOutput();        // 伺服器端讀不到-1,不會終止,調用這個方法可以終止        InputStream in = socket.getInputStream();        len = in.read(bytes);        System.out.println(new String(bytes, 0, len));        fis.close();        socket.close();    }}
View Code

伺服器端:

package demo1;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Random;public class TCPServer {    public static void main(String[] args) throws IOException {        ServerSocket server = new ServerSocket(7000);        Socket socket = server.accept();        InputStream in = socket.getInputStream();        File upload = new File("d:\\upload");        if (!upload.exists()) {            upload.mkdirs();        }        String filename = System.currentTimeMillis() + new Random().nextInt(999999) + ".jpeg";        FileOutputStream fos = new FileOutputStream(upload + File.separator + filename);        // 這裡是處理圖片重名的問題        byte[] bytes = new byte[1024];        int len = 0;        while ((len = in.read(bytes)) != -1) {            fos.write(bytes, 0, len);        }        socket.getOutputStream().write("上傳成功".getBytes());        fos.close();        socket.close();        server.close();    }}
View Code

 

如果多個用戶端一起上傳,就需要多線程的技術,每個用戶端佔一個線程

用戶端不需要修改

伺服器端:

package demo1;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {    public static void main(String[] args) throws IOException {        ServerSocket server = new ServerSocket(7000);        while (true) {            Socket socket = server.accept();            new Thread(new Upload(socket)).start();        }    }}
View Code
package demo1;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Random;public class Upload implements Runnable {    private Socket socket;    public Upload(Socket socket) {        this.socket = socket;    }    public void run() {        try {            InputStream in = socket.getInputStream();            File upload = new File("d:\\upload");            if (!upload.exists()) {                upload.mkdirs();            }            String filename = System.currentTimeMillis() + new Random().nextInt(999999) + ".jpeg";            FileOutputStream fos = new FileOutputStream(upload + File.separator + filename);            // 這裡是處理圖片重名的問題            byte[] bytes = new byte[1024];            int len = 0;            while ((len = in.read(bytes)) != -1) {                fos.write(bytes, 0, len);            }            socket.getOutputStream().write("上傳成功".getBytes());            fos.close();            socket.close();        } catch (IOException ex) {            System.out.println(ex);        }    }}
View Code

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.