Java網路程式設計TCP協議傳送接收資料
阿新 • • 發佈:2019-01-14
一、客戶端傳送,伺服器端接收
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();
}
}