1. 程式人生 > >Java網路程式設計TCP協議傳送接收資料

Java網路程式設計TCP協議傳送接收資料

一、客戶端傳送,伺服器端接收

package net;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * TCP協議接收資料:
 * A:建立接收端Socket物件
 * B:監聽客戶端連線,返回一個對應的Socket物件
 * C:獲取輸入流,在控制檯顯示資料
 * D:釋放資源
 */
public class ServerDemo {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(10010);
		
		Socket s = ss.accept();
		
		InputStream is = s.getInputStream();
		byte[] bys = new byte[1024];
		int len = is.read(bys);
		String str = new String(bys, 0, len);
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"————"+str);
		
		s.close();
	}
}
package net;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

/*
 * TCP協議傳送資料:
 * A:建立傳送端的Socket物件
 * B:獲取輸出流,寫資料
 * C:釋放資源
 */
public class ClientDemo {
	public static void main(String[] args) throws IOException {
		Socket s = new Socket("192.168.1.22",10010);
		
		OutputStream os = s.getOutputStream();
		os.write("Hello TCP!".getBytes());
		
		s.close();
	}
}

二、客戶端從鍵盤錄入資料,伺服器端輸出到控制檯

package net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ClientDemo {
	public static void main(String[] args) throws IOException {
		//建立客戶端Socket物件
		Socket s = new Socket("192.168.1.22",10010);
		//鍵盤錄入資料
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//包裝通道內的流
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		
		String line = null;
		while((line = br.readLine()) != null){
			if("jieshu".equals(line)){
				break;
			}
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		br.close();
		s.close();
	}
}
package net;

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

public class ServerDemo {
	public static void main(String[] args) throws IOException {
		//建立伺服器端Socket物件
		ServerSocket ss = new ServerSocket(10010);
		//監聽客戶端連線
		Socket s = ss.accept();
		//包裝通道內的流
		BufferedReader br= new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line = null;
		while((line = br.readLine()) != null){
			System.out.println(line);
		}
		
		s.close();
	}
}

三、客戶端從鍵盤錄入資料,伺服器端輸出到文字檔案

客戶端程式碼同二

伺服器端:

package net;

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

public class ServerDemo {
	public static void main(String[] args) throws IOException {
		//建立伺服器端Socket物件
		ServerSocket ss = new ServerSocket(10010);
		//監聽客戶端連線
		Socket s = ss.accept();
		//包裝通道內的流
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//封裝文字檔案
		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
		
		String line = null;
		while((line = br.readLine()) != null){
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		bw.close();
		s.close();
	}
}

三、客戶端讀文字檔案,伺服器端輸出到控制檯

客戶端:

package net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ClientDemo {
	public static void main(String[] args) throws IOException {
		//建立客戶端Socket物件
		Socket s = new Socket("192.168.1.22",10010);
		//封裝文字檔案
		BufferedReader br = new BufferedReader(new FileReader("fos.txt"));
		//包裝通道內的流
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		
		String line = null;
		while((line = br.readLine()) != null){
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		br.close();
		s.close();
	}
}

伺服器端程式碼同二

四、客戶端上傳文字檔案,伺服器端給出反饋

package net;

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

public class ServerDemo {
	public static void main(String[] args) throws IOException {
		//建立伺服器端Socket物件
		ServerSocket ss = new ServerSocket(10010);
		//監聽客戶端連線
		Socket s = ss.accept();
		//包裝通道內的流
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//封裝文字檔案
		BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
		
		String line = null;
		while((line = br.readLine()) != null){
			//此處當伺服器讀到"over"時,跳出迴圈,否則不會讀到null,一直在迴圈內
			if("over".equals(line)){
				break;
			}
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		//給出反饋
		BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		bwServer.write("檔案上傳成功");
		bwServer.newLine();
		bwServer.flush();
		
		bw.close();
		s.close();
	}
}

五、客戶端上傳圖片,伺服器端給出反饋

package net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class ClientDemo {
	public static void main(String[] args) throws IOException {
		//建立客戶端Socket物件
		Socket s = new Socket("192.168.1.22",10010);
		//封裝圖片檔案
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("tupian.jpg"));
		//封裝通道內的流
		BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
		
		byte[] bys = new byte[1024];
		int len = 0;
		while((len = bis.read(bys)) != -1){
			bos.write(bys, 0, len);
		}
		
		s.shutdownOutput();
		
		//接收反饋
		InputStream is = s.getInputStream();
		byte[] bys2 = new byte[1024];
		int len2 = is.read(bys2);
		String client = new String(bys2, 0, len2);
		System.out.println(client);
		
		bis.close();
		s.close();
	}
}
package net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {
	public static void main(String[] args) throws IOException {
		//建立伺服器端Socket物件
		ServerSocket ss = new ServerSocket(10010);
		//監聽客戶端連線
		Socket s = ss.accept();
		//封裝通道內的流
		BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
		//封裝圖片檔案
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("aaa.jpg"));
		
		byte[] bys = new byte[1024];
		int len = 0;
		while((len = bis.read(bys)) != -1){
			bos.write(bys, 0, len);
		}
		
		//給出反饋
		OutputStream os = s.getOutputStream();
		
		os.write("圖片上傳成功".getBytes());
		
		bos.close();
		s.close();
	}
}