TCP客戶端
客戶端發數據到服務端
Tcp傳輸: 客戶端建立的過程.
思路:
1.創建Tcp客戶端socket服務.使用的是socket對象.
建議該對象一創建就明確目的地.要連接的主機.
2.如果連接建立成功,說明數據傳輸通道已建立.
該通道就是socket流,是底層建立好的. 既然是流,說明這裏既有輸入,又有輸出.
想要輸入和輸出流對象,可以找socket來獲取.
可以通過getOutputStream(),和getInputStream()來獲取兩個字節流.
3.使用輸出流. 將數據寫出.
4.關閉資源
代碼實現:
import java.net.Socket;
import java.io.OutputStream;
import java.io.IOException;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
System.out.println("TCP客戶端啓動...");
//1.建立客戶端socket服務
Socket s = new Socket("127.0.0.1", 10000);
//2.獲取socket流中的輸出流
OutputStream out = s.getOutputStream();
//使用輸出流將指定的數據寫出去
out.write("tcp演示: Hello Java".getBytes());
//關閉資源
s.close();
}
}
TCP服務端
服務端接收客戶端的數據,並打印在控制檯上
Tcp傳輸,客戶端建立的過程.
思路:
1.創建Tcp客戶端socket服務.使用的是socket對象.
建議該對象一創建就明確目的地.要連接的主機.
2.如果連接建立成功,說明數據傳輸通道已建立.
該通道就是socket流,是底層建立好的. 既然是流,說明這裏既有輸入,又有輸出.
想要輸入和輸出流對象,可以找socket來獲取.
可以通過getOutputStream(),和getInputStream()來獲取兩個字節流.
3.使用輸出流. 將數據寫出.
4.關閉資源
代碼實現:
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.io.InputStream;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
System.out.println("TCP服務端端啓動...");
//1.創建服務端對象
ServerSocket ss = new ServerSocket(10000);
//2.獲取連接過來的客戶端對象
Socket s = ss.accept(); //阻塞式
//獲取ip地址
String ip = s.getInetAddress().getHostAddress();
//3.通過socket對象獲取輸入流,要讀取客戶端發來的數據
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
//因爲知道發的數據不會很多...所有就直接可以弄了
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(ip+":"+text);
//4.關閉資源
s.close();
ss.close();
}
}
與UDP
不同的是TCP
必須先啓動服務端…因爲TCP是必須先建立連接的.
運行結果
先執行服務端
因爲Socket s = ss.accept()
是阻塞式的,需要接收到數據,纔會往下執行.
執行客戶端
這時再看服務端
收到了客戶端發送的消息了…以及知道了是那個ip發送的…
還可以讓客戶端持續發送文字…然後服務端持續接收…或者通過客戶端上傳照片,音樂等文件到服務端上