???? socket通信分為tcp和udp兩種。
?
? 1、 Socket通信模型如下:
? 2、
?UDP協議:
?????? 把數據打包成數據包,然后直接發送對應的ip地址,速度快,但是不保證成功率,并且數據大小有限
TCP協議:
?????? 首先連接接收方,然后發送數據,保證成功率, 速度慢
3、 TCP通信方式如下:
?
而UDP通信不使用InputStream和OutputStream
?
4、 UDP通信實現:
UDP使用DatagramSocket對象來實現,UDP的客戶端代碼實現如下:
?
public static void main(String[] args) { try { // 首先創建一個DatagramSocket對象 DatagramSocket socket = new DatagramSocket(4567); // 創建一個InetAddree InetAddress serverAddress = InetAddress.getByName("192.168.1.104"); String str = "hello"; // 這是要傳輸的數據 byte data[] = str.getBytes(); // 把傳輸內容分解成字節 // 創建一個DatagramPacket對象,并指定要講這個數據包發送到網絡當中的哪個、地址,以及端口號 DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 4567); // 調用socket對象的send方法,發送數據 socket.send(packet); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
? UDP的服務端代碼實現如下:
// 創建一個DatagramSocket對象,并指定監聽的端口號 DatagramSocket socket = new DatagramSocket(4567); byte data[] = new byte[1024]; // 創建一個空的DatagramPacket對象 DatagramPacket packet = new DatagramPacket(data, data.length); // 使用receive方法接收客戶端所發送的數據, // 如果客戶端沒有發送數據,該進程就停滯在這里 socket.receive(packet); String result = new String(packet.getData(), packet.getOffset(), packet.getLength()); System.out.println("result--->" + result);
?
5、? TCP通信的實現:
TCP使用Socket對象
TCP協議客戶端實現:
// 創建一個Socket對象,指定服務器端的IP地址和端口號 Socket socket = new Socket("192.168.1.104", 4567); // 使用InputStream讀取硬盤上的文件 InputStream inputStream = new FileInputStream("f://file/words.txt"); // 從Socket當中得到OutputStream OutputStream outputStream = socket.getOutputStream(); byte buffer[] = new byte[4 * 1024]; int temp = 0; // 將InputStream當中的數據取出,并寫入到OutputStream當中 while ((temp = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, temp); } outputStream.flush();
?
TCP協議服務器端現實:
//聲明一個ServerSocket對象 ServerSocket serverSocket = null; try { //創建一個ServerSocket對象,并讓這個Socket在4567端口監聽 serverSocket = new ServerSocket(4567); //調用ServerSocket的accept()方法,接受客戶端所發送的請求, //如果客戶端沒有發送數據,那么該線程就停滯不繼續 Socket socket = serverSocket.accept(); //從Socket當中得到InputStream對象 InputStream inputStream = socket.getInputStream(); byte buffer [] = new byte[1024*4]; int temp = 0; //從InputStream當中讀取客戶端所發送的數據 while((temp = inputStream.read(buffer)) != -1){ System.out.println(new String(buffer,0,temp)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } serverSocket.close(); }
?
摘自他人博客,未經驗證,但是覺得很好。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
