网络通信-2(TCP通信、ServerSocket、Socket)
生活随笔
收集整理的這篇文章主要介紹了
网络通信-2(TCP通信、ServerSocket、Socket)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. TCP通信
UDP中只有發送端和接收端,不區分客戶端和服務器端。計算機之間可以任意地發送消息。
TCP通信嚴格區分客戶端和服務器。
通信時,必須由客戶端去連接服務器才能實現通信。服務器不可主動連接客戶端。
且服務器應事先啟動,等待客戶端的連接。
2. ServerSocket
2.1 構造方法
ServerSocket(int port):創建綁定到特定端口的服務器套接字。
2.2 常用方法
Socket accept():?偵聽并接受到此套接字的連接。
- accept()之后,服務器端程序會發生阻塞,直到客戶端發出連接請求,accept()才會返回一個Socket對象,用于和客戶端實現通信,陳故鄉才能繼續向下執行。
InetAddress getInetAddress():返回此服務器套接字的本地地址。
3. Socket
此類實現客戶端套接字(也可以就叫“套接字”)。套接字是兩臺機器間通信的端點。
3.1 構造方法
Socket(String host,int port):?創建一個流套接字并將其連接到指定主機上的指定端口號。
3.2 常用方法
int gerPort():?返回此套接字連接到的遠程端口。
- 該對象是和Socket對象相連的端口號
InetAddress getLocalAddress():?獲取套接字綁定的本地地址。
- 用于獲取Socket對象綁定的本地IP地址,并將IP地址封裝成InetAddress對象返回
close():關閉Socket連接
InputStream getInputStream():返回此套接字的輸入流。
- 該對象由服務器的Socket返回,則用于讀取客戶端發動的數據
- 反之,則用于讀取服務器發送的數據
OutputStream getOutputStream():??返回此套接字的輸出流。
- 若該對象是由服務器端的Socket返回的,則適用于向客戶端發送數據
- 反之,用于向客戶端發送數據
4. 具體實現
4.1 TCP服務器端
4.2 TCP客戶端
4.3 運行結果
5.圖片上傳案例
5.1分析
5.2服務器端
package PicDemo;import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket;public class Server{public static void main(String[] args) throws IOException {//1.創建服務端Socket對象ServerSocket ss = new ServerSocket(8888);//監聽Socket s = ss.accept();//7.獲取輸入流對象InputStream is = s.getInputStream();//8.創建本地輸入流OutputStream os=new FileOutputStream("E:\\b.jpg");//9.讀數據byte[] bys = new byte[1024];int len;//用于存儲讀取到的字節個數while((len = is.read(bys))!=-1) {os.write(bys,0,len);}//10.獲取Socket輸出流OutputStream sos=s.getOutputStream();//返回數據(發出數據)sos.write("圖片上傳成功!".getBytes());//釋放資源sos.close();os.close();is.close();s.close();//ss.close();//服務端一般不關閉} }5.3服務器端
package PicDemo;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {//2.創建客戶端Socket對象Socket s = new Socket("10.170.7.148",8888);//3.獲取Socket輸出流對象OutputStream os = s.getOutputStream();//4.創建字節輸入流InputStream is=new FileInputStream("D:\\JAVA\\a.jpg");//5.把數據源中的字節流寫到Socket輸出流中int len=-1;byte[] bys=new byte[1024];while((len=is.read(bys))!=-1) {os.write(bys,0,len);}//6.讀完后,告訴服務器端s.shutdownOutput();//12.接收數據InputStream iis=s.getInputStream();len = iis.read(bys);//輸出數據System.out.println(new String(bys,0,len));//釋放資源is.close();os.close();s.close();} }運行結果:
注:客戶端第6步中,需進行調用shutdownOutput();告訴服務器數據讀取完畢,否則程序不結束。
?
?
總結
以上是生活随笔為你收集整理的网络通信-2(TCP通信、ServerSocket、Socket)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络通信-1(InetAddress、U
- 下一篇: Java Data Base Conne