日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【JAVA基础篇】Socket编程

發布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【JAVA基础篇】Socket编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Socket的概念

Socket是一種通訊機制,通常稱為套接字。英文原意是插座,顧明思義,Socket像是一個多孔插座,可以提供多個端口的連接服務

ps:至于socket在計算機術語中怎么就翻譯成了“套接字”這個令人費解的詞,這真是未解之謎。

二、Java Socket編程示例

2.1、基于TCP協議

tcp協議是面向連接的,通常會有服務端和客戶端,服務端和客戶端先連接,然后傳遞消息。

SendMsg:用于創建發送消息的線程

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter;/*** 發送消息* @author cc**/ public class SendMsg implements Runnable {private OutputStream os;public SendMsg(OutputStream os) {super();this.os = os;}public OutputStream getOs() {return os;}public void setOs(OutputStream os) {this.os = os;}@Overridepublic void run() {BufferedReader consoleBr = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(os);String msg = null;while (true) {try {msg = consoleBr.readLine();pw.println(msg);pw.flush();} catch (IOException e) {e.printStackTrace();}}}}

RecevieMsg:用于創建接收消息的線程

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;/*** 接收消息* * @author cc**/ public class RecevieMsg implements Runnable {private InputStream is;public RecevieMsg(InputStream is) {super();this.is = is;}public InputStream getIs() {return is;}public void setIs(InputStream is) {this.is = is;}@Overridepublic void run() {BufferedReader netBr = new BufferedReader(new InputStreamReader(is));String msg = null;while (true) {try {msg = netBr.readLine();System.out.println(Thread.currentThread().getName() + "讀到一行數據:" + msg);} catch (IOException e) {e.printStackTrace();System.exit(0);}}} }

Server:服務端

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /*** 服務端* @author cc**/ public class Server {public static void main(String[] args) {ServerSocket socket;try {socket = new ServerSocket(30000);System.out.println("我已經開啟服務了!");Socket client = socket.accept();System.out.println("有客戶端連接進來!");InputStream is = client.getInputStream();OutputStream os = client.getOutputStream();Thread thread = new Thread(new RecevieMsg(is), "服務端接收線程");Thread thread2 = new Thread(new SendMsg(os), "服務端發送線程");thread.start();thread2.start();} catch (IOException e) {e.printStackTrace();}} }

Client:客戶端

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /*** 客戶端* @author cc**/ public class Client {public static void main(String[] args) {Socket socket;try {socket = new Socket("127.0.0.1", 30000);InputStream is = socket.getInputStream();OutputStream os = socket.getOutputStream();Thread thread = new Thread(new RecevieMsg(is), "客戶端接收線程");Thread thread2 = new Thread(new SendMsg(os), "客戶端發送線程");thread.start();thread2.start();} catch (IOException e) {e.printStackTrace();}} }

啟動Server后再啟動Client,然后就可以通過兩個控制臺聊天啦!

擴展:用上面的代碼,如果是一個服務端和一個客戶端的話通過控制臺進行收發消息沒有問題,但是一個服務端和多個客戶端(Client類執行多次)的話會有問題,理由是:當你用服務端的終端發送消息的時候,這個消息應該發給哪個客戶端呢?實際情況是當服務端終端發送消息的條數達到客戶端的數量時,數據才會發出去,并且第一條對應的發給第一個客戶端。

因此我們不同通過服務端終端來給客戶端發送消息,更改了Server類并且新增了ServerHandleClientMsg類

Server

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /*** 服務端* @author cc**/ public class Server {public static void main(String[] args) {try {ServerSocket socket = new ServerSocket(30000);System.out.println("我已經開啟服務了!");while(true){Socket client = socket.accept();System.out.println("有客戶端連接進來!");InputStream is = client.getInputStream();OutputStream os = client.getOutputStream();Thread thread = new Thread(new ServerHandleClientMsg(is,os), "服務端處理客戶端信息");thread.start();}} catch (IOException e) {e.printStackTrace();}} }

ServerHandleClientMsg

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter;/*** 服務端處理客戶端信息* @author cc**/ public class ServerHandleClientMsg implements Runnable{private InputStream is;private OutputStream os;public void setInputStream(InputStream inputStream) {this.is = inputStream;}public void setOutputStream(OutputStream outputStream) {this.os = outputStream;}public ServerHandleClientMsg(InputStream inputStream, OutputStream outputStream) {super();this.is = inputStream;this.os = outputStream;}boolean endFlag = false;@Overridepublic void run() {BufferedReader netBr = new BufferedReader(new InputStreamReader(is));String msg = null;while (true) {try {msg = netBr.readLine();System.out.println("線程名為"+Thread.currentThread().getName()+"、線程ID為"+Thread.currentThread().getId()+"的線程讀到一行數據:"+msg);PrintWriter pw = new PrintWriter(os);pw.println("服務端已收到您的消息:"+msg);pw.flush();} catch (IOException e) {e.printStackTrace();endFlag = true;}if(endFlag){break;}}}}

2.2、基于UDP協議

udp協議是無連接的,并且是不可靠的,直接向網絡發送數據報。

import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketAddress;public class Receive {public static void main(String[] args) {try {// 確定接受方的IP和端口號,IP地址為本地機器地址InetAddress ip = InetAddress.getLocalHost();int port = 8888;// 創建接收方的套接字,并指定端口號和IP地址DatagramSocket getSocket = new DatagramSocket(port, ip);// 確定數據報接受的數據的數組大小byte[] buf = new byte[1024];// 創建接受類型的數據報,數據將存儲在buf中DatagramPacket getPacket = new DatagramPacket(buf, buf.length);// 通過套接字接收數據getSocket.receive(getPacket);// 解析發送方傳遞的消息,并打印String getMes = new String(buf, 0, getPacket.getLength());System.out.println("對方發送的消息:" + getMes);// 通過數據報得到發送方的IP和端口號,并打印InetAddress sendIP = getPacket.getAddress();int sendPort = getPacket.getPort();System.out.println("對方的IP地址是:" + sendIP.getHostAddress());System.out.println("對方的端口號是:" + sendPort);// 通過數據報得到發送方的套接字地址SocketAddress sendAddress = getPacket.getSocketAddress();// 確定要反饋發送方的消息內容,并轉換為字節數組String feedback = "接收方說:我收到了!";byte[] backBuf = feedback.getBytes();// 創建發送類型的數據報DatagramPacket sendPacket = new DatagramPacket(backBuf,backBuf.length, sendAddress);// 通過套接字發送數據getSocket.send(sendPacket);// 關閉套接字getSocket.close();} catch (Exception e) {e.printStackTrace();}} } import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;public class Sender {public static void main(String[] args) {try {// 創建發送方的套接字,IP默認為本地,端口號隨機DatagramSocket sendSocket = new DatagramSocket();// 確定要發送的消息:String mes = "你好!接收方!";// 數據報的數據是以字節數組的形式存儲的byte[] buf = mes.getBytes();// 確定發送方的IP地址及端口號,地址為本地機器地址int port = 8888;InetAddress ip = InetAddress.getLocalHost();// 創建發送類型的數據報:DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, ip, port);// 通過套接字發送數據:sendSocket.send(sendPacket);// 確定接受反饋數據的緩沖存儲器,即存儲數據的字節數組byte[] getBuf = new byte[1024];// 創建接受類型的數據報DatagramPacket getPacket = new DatagramPacket(getBuf, getBuf.length);// 通過套接字接受數據sendSocket.receive(getPacket);// 解析反饋的消息,并打印String backMes = new String(getBuf, 0, getPacket.getLength());System.out.println("接受方返回的消息:" + backMes);// 關閉套接字sendSocket.close();} catch (Exception e) {e.printStackTrace();}} }

先啟動Receive,在啟動Sender

上面的例子是點對點通信,下面我們來看如何進行多播

import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class MulticastListener { private int port; private String host; public MulticastListener(String host, int port) { this.host = host; this.port = port; } public void listen() { byte[] data = new byte[256]; try { InetAddress ip = InetAddress.getByName(this.host); MulticastSocket ms = new MulticastSocket(this.port); ms.joinGroup(ip); DatagramPacket packet = new DatagramPacket(data, data.length); //receive()是阻塞方法,會等待客戶端發送過來的信息 ms.receive(packet); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println(message); ms.close(); } catch (Exception e) { e.printStackTrace(); System.exit(0);} } public static void main(String[] args) { int port = 1234; String host = "228.0.0.1"; MulticastListener ml = new MulticastListener(host, port); while (true) { ml.listen(); } } } import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class MulticastSender { private int port; private String host; private String data; public MulticastSender(String data, String host, int port) { this.data = data; this.host = host; this.port = port; } public void send() { try { InetAddress ip = InetAddress.getByName(this.host); DatagramPacket packet = new DatagramPacket(this.data.getBytes(), this.data.length(), ip, this.port); MulticastSocket ms = new MulticastSocket(); ms.send(packet); ms.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { int port = 1234; String host = "228.0.0.1"; String data = "hello world."; MulticastSender ms = new MulticastSender(data, host, port); ms.send(); } }

先啟動MulticastListener,再啟動MulticastSender

ps:多播地址范圍224.0.0.0~239.255.255.255

2.3、基于HTTP協議

其實HTTP協議是TCP的一種。下面介紹了Java中基于HTTP協議的兩種通信方式。

2.3.1 URLConnection

JDK提供的基于HTTP協議的api實現

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection;public class URLDemo {public static void main(String[] args) {try {URL url = new URL("https://www.baidu.com/");URLConnection urlConnection = url.openConnection();InputStream is = urlConnection.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String msg = null;while ((msg = br.readLine()) != null) {System.out.println(msg);}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

2.3.2?HttpClient

除此之外HttpClient是Java中另一種基于Http協議的通信方式,相比JDK自帶的URLConnection,增加了易用性和靈活性。

下面給出了HttpClient的簡單Demo。環境:JDK1.8,用Maven構建,使用SpringBoot框架。

依賴

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cc</groupId><artifactId>HttpClient</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- springboot的web和test啟動庫 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- apache httpclient組件 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

應用啟動類

package com;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }

Controller

package com.cc.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;/*** Description: get和post請求測試controller* * @author JourWon* @date Created on 2018年4月19日*/ @RestController @RequestMapping("/hello") public class HelloWorldController {@GetMapping("/get")public String get() throws InterruptedException {return "get無參請求成功";}@GetMapping("/getWithParam")public String getWithParam(@RequestParam String message) {return "get帶參請求成功,參數message: " + message;}@PostMapping("/post")public String post(@RequestHeader("User-Agent") String userAgent, @RequestHeader("Accept") String accept,@RequestHeader("Accept-Language") String acceptLanguage,@RequestHeader("Accept-Encoding") String acceptEncoding, @RequestHeader("Cookie") String cookie,@RequestHeader("Connection") String conn) {// 打印請求頭信息System.out.println("Cookie = " + cookie);System.out.println("Connection = " + conn);System.out.println("Accept = " + accept);System.out.println("Accept-Language = " + acceptLanguage);System.out.println("Accept-Encoding = " + acceptEncoding);System.out.println("User-Agent = " + userAgent);return "post無參請求成功";}@PostMapping("/postWithParam")public String postWithParam(@RequestParam String code, @RequestParam String message) {return "post帶參請求成功,參數code: " + code + ",參數message: " + message;}}

HttpClient響應結果

package com.cc.util; import java.io.Serializable;/*** Description: 封裝httpClient響應結果* * @author JourWon* @date Created on 2018年4月19日*/ public class HttpClientResult implements Serializable {/*** 響應狀態碼*/private int code;/*** 響應數據*/private String content;public HttpClientResult(int code, String content) {super();this.code = code;this.content = content;}public HttpClientResult(int code) {super();this.code = code;}public HttpClientResult() {super();}}

核心代碼:使用httpclient api發送http請求

package com.cc.util;import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set;import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils;/*** Description: httpClient工具類* * @author JourWon* @date Created on 2018年4月19日*/ public class HttpClientUtils {// 編碼格式。發送編碼格式統一用UTF-8private static final String ENCODING = "UTF-8";// 設置連接超時時間,單位毫秒。private static final int CONNECT_TIMEOUT = 6000;// 請求獲取數據的超時時間(即響應時間),單位毫秒。private static final int SOCKET_TIMEOUT = 6000;/*** 發送get請求;不帶請求頭和請求參數* * @param url* 請求地址* @return* @throws Exception*/public static HttpClientResult doGet(String url) throws Exception {return doGet(url, null, null);}/*** 發送get請求;帶請求參數* * @param url* 請求地址* @param params* 請求參數集合* @return* @throws Exception*/public static HttpClientResult doGet(String url, Map<String, String> params) throws Exception {return doGet(url, null, params);}/*** 發送get請求;帶請求頭和請求參數* * @param url* 請求地址* @param headers* 請求頭集合* @param params* 請求參數集合* @return* @throws Exception*/public static HttpClientResult doGet(String url, Map<String, String> headers, Map<String, String> params)throws Exception {// 創建httpClient對象CloseableHttpClient httpClient = HttpClients.createDefault();// 創建訪問的地址URIBuilder uriBuilder = new URIBuilder(url);if (params != null) {Set<Entry<String, String>> entrySet = params.entrySet();for (Entry<String, String> entry : entrySet) {uriBuilder.setParameter(entry.getKey(), entry.getValue());}}// 創建http對象HttpGet httpGet = new HttpGet(uriBuilder.build());/*** setConnectTimeout:設置連接超時時間,單位毫秒。* setConnectionRequestTimeout:設置從connect Manager(連接池)獲取Connection* 超時時間,單位毫秒。這個屬性是新加的屬性,因為目前版本是可以共享連接池的。* setSocketTimeout:請求獲取數據的超時時間(即響應時間),單位毫秒。* 如果訪問一個接口,多少時間內無法返回數據,就直接放棄此次調用。*/RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();httpGet.setConfig(requestConfig);// 設置請求頭packageHeader(headers, httpGet);// 創建httpResponse對象CloseableHttpResponse httpResponse = null;try {// 執行請求并獲得響應結果return getHttpClientResult(httpResponse, httpClient, httpGet);} finally {// 釋放資源release(httpResponse, httpClient);}}/*** 發送post請求;不帶請求頭和請求參數* * @param url* 請求地址* @return* @throws Exception*/public static HttpClientResult doPost(String url) throws Exception {return doPost(url, null, null);}/*** 發送post請求;帶請求參數* * @param url* 請求地址* @param params* 參數集合* @return* @throws Exception*/public static HttpClientResult doPost(String url, Map<String, String> params) throws Exception {return doPost(url, null, params);}/*** 發送post請求;帶請求頭和請求參數* * @param url* 請求地址* @param headers* 請求頭集合* @param params* 請求參數集合* @return* @throws Exception*/public static HttpClientResult doPost(String url, Map<String, String> headers, Map<String, String> params)throws Exception {// 創建httpClient對象CloseableHttpClient httpClient = HttpClients.createDefault();// 創建http對象HttpPost httpPost = new HttpPost(url);/*** setConnectTimeout:設置連接超時時間,單位毫秒。* setConnectionRequestTimeout:設置從connect Manager(連接池)獲取Connection* 超時時間,單位毫秒。這個屬性是新加的屬性,因為目前版本是可以共享連接池的。* setSocketTimeout:請求獲取數據的超時時間(即響應時間),單位毫秒。* 如果訪問一個接口,多少時間內無法返回數據,就直接放棄此次調用。*/RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();httpPost.setConfig(requestConfig);// 設置請求頭/** httpPost.setHeader("Cookie", ""); httpPost.setHeader("Connection",* "keep-alive"); httpPost.setHeader("Accept", "application/json");* httpPost.setHeader("Accept-Language", "zh-CN,zh;q=0.9");* httpPost.setHeader("Accept-Encoding", "gzip, deflate, br");* httpPost.setHeader("User-Agent",* "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"* );*/packageHeader(headers, httpPost);// 封裝請求參數packageParam(params, httpPost);// 創建httpResponse對象CloseableHttpResponse httpResponse = null;try {// 執行請求并獲得響應結果return getHttpClientResult(httpResponse, httpClient, httpPost);} finally {// 釋放資源release(httpResponse, httpClient);}}/*** 發送put請求;不帶請求參數* * @param url* 請求地址* @param params* 參數集合* @return* @throws Exception*/public static HttpClientResult doPut(String url) throws Exception {return doPut(url);}/*** 發送put請求;帶請求參數* * @param url* 請求地址* @param params* 參數集合* @return* @throws Exception*/public static HttpClientResult doPut(String url, Map<String, String> params) throws Exception {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPut httpPut = new HttpPut(url);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();httpPut.setConfig(requestConfig);packageParam(params, httpPut);CloseableHttpResponse httpResponse = null;try {return getHttpClientResult(httpResponse, httpClient, httpPut);} finally {release(httpResponse, httpClient);}}/*** 發送delete請求;不帶請求參數* * @param url* 請求地址* @param params* 參數集合* @return* @throws Exception*/public static HttpClientResult doDelete(String url) throws Exception {CloseableHttpClient httpClient = HttpClients.createDefault();HttpDelete httpDelete = new HttpDelete(url);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();httpDelete.setConfig(requestConfig);CloseableHttpResponse httpResponse = null;try {return getHttpClientResult(httpResponse, httpClient, httpDelete);} finally {release(httpResponse, httpClient);}}/*** 發送delete請求;帶請求參數* * @param url* 請求地址* @param params* 參數集合* @return* @throws Exception*/public static HttpClientResult doDelete(String url, Map<String, String> params) throws Exception {if (params == null) {params = new HashMap<String, String>();}params.put("_method", "delete");return doPost(url, params);}/*** Description: 封裝請求頭* * @param params* @param httpMethod*/public static void packageHeader(Map<String, String> params, HttpRequestBase httpMethod) {// 封裝請求頭if (params != null) {Set<Entry<String, String>> entrySet = params.entrySet();for (Entry<String, String> entry : entrySet) {// 設置到請求頭到HttpRequestBase對象中httpMethod.setHeader(entry.getKey(), entry.getValue());}}}/*** Description: 封裝請求參數* * @param params* @param httpMethod* @throws UnsupportedEncodingException*/public static void packageParam(Map<String, String> params, HttpEntityEnclosingRequestBase httpMethod)throws UnsupportedEncodingException {// 封裝請求參數if (params != null) {List<NameValuePair> nvps = new ArrayList<NameValuePair>();Set<Entry<String, String>> entrySet = params.entrySet();for (Entry<String, String> entry : entrySet) {nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}// 設置到請求的http對象中httpMethod.setEntity(new UrlEncodedFormEntity(nvps, ENCODING));}}/*** Description: 獲得響應結果* * @param httpResponse* @param httpClient* @param httpMethod* @return* @throws Exception*/public static HttpClientResult getHttpClientResult(CloseableHttpResponse httpResponse,CloseableHttpClient httpClient, HttpRequestBase httpMethod) throws Exception {// 執行請求httpResponse = httpClient.execute(httpMethod);// 獲取返回結果if (httpResponse != null && httpResponse.getStatusLine() != null) {String content = "";if (httpResponse.getEntity() != null) {content = EntityUtils.toString(httpResponse.getEntity(), ENCODING);}return new HttpClientResult(httpResponse.getStatusLine().getStatusCode(), content);}return new HttpClientResult(HttpStatus.SC_INTERNAL_SERVER_ERROR);}/*** Description: 釋放資源* * @param httpResponse* @param httpClient* @throws IOException*/public static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException {// 釋放資源if (httpResponse != null) {httpResponse.close();}if (httpClient != null) {httpClient.close();}}}

測試類:放在src/test/java包中

import java.util.HashMap; import java.util.Map;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration;import com.Application; import com.cc.util.HttpClientResult; import com.cc.util.HttpClientUtils;/*** Description: HttpClientUtils工具類測試* * @author JourWon* @date Created on 2018年4月19日*/ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = Application.class) @WebAppConfiguration public class HttpClientUtilsTest {/*** Description: 測試get無參請求* * @throws Exception*/// @Testpublic void testGet() throws Exception {HttpClientResult result = HttpClientUtils.doGet("http://127.0.0.1:8080/hello/get");System.out.println(result);}/*** Description: 測試get帶參請求* * @throws Exception*/// @Testpublic void testGetWithParam() throws Exception {Map<String, String> params = new HashMap<String, String>();params.put("message", "helloworld");HttpClientResult result = HttpClientUtils.doGet("http://127.0.0.1:8080/hello/getWithParam", params);System.out.println(result);}/*** Description: 測試post帶請求頭不帶請求參數* * @throws Exception*/// @Testpublic void testPost() throws Exception {Map<String, String> headers = new HashMap<String, String>();headers.put("Cookie", "123");headers.put("Connection", "keep-alive");headers.put("Accept", "application/json");headers.put("Accept-Language", "zh-CN,zh;q=0.9");headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");HttpClientResult result = HttpClientUtils.doPost("http://127.0.0.1:8080/hello/post", headers, null);System.out.println(result);}/*** Description: 測試post帶參請求* * @throws Exception*/@Testpublic void testPostWithParam() throws Exception {Map<String, String> params = new HashMap<String, String>();params.put("code", "0");params.put("message", "helloworld");HttpClientResult result = HttpClientUtils.doPost("http://127.0.0.1:8080/hello/postWithParam", params);System.out.println(result);}}

三、總結

上面的代碼較為繁瑣,這里總結一下。

3.1、TCP通信如何實現

1、創建兩個線程類,分別用于發送消息和接收消息;

2、基于通信的輸出流實例化PringWriter對象,發送消息的線程每次通過PringWriter.println發送一條信息

3、基于通信的輸入流實例化BufferReader對象,接收消息的線程每次通過readLine讀取一行數據

4、Main線程中,服務端實例化ServerSocket對象、客戶端用實例化Socket對象,然后各自獲取輸入和輸出流并創建發送消息和接收消息的線程。(注意服務端要先執行accept方法,監聽端口)

3.2、UDP通信如何實現

1、創建一個緩存數據的字節數組,然后基于這個數組實例化DatagramPacket,然后創建接收消息的DatagramSocket,然后調用receive方法

2、將需要發送的數據轉換成字節數組,然后創建一個DatagramPacket對象,然后創建發送消息的DatagramSocket,然后調用send方法

3、注意發送和接收的差異:接收方在實例化DatagramSocket時指定ip和端口,發送發在實例化DatagramPacket時指定ip和端口。

多播這里就省略了,跟UDP差不多。

3.3、用JDK原生API

1、實例化URL對象

2、獲得一個URLConnection實例

3、獲得輸入流并包裝

3.4、HttpClient

1、首先創建一個默認的httpclient對象(CloseableHttpClient)

2、實例化URIBuilder對象(httpget才有)

3、基于URIBuilder實例化httpget對象

4、httpGet或者httpPost.setConfig

5、設置請求頭,設置請求參數(post方法才有)

6、執行請求httpClient.execute(httpMethod),并且返回一個CloseableHttpResponse對象

7、調用httpresponse對象的兩個方法getStatusLine、getEntity

8、關閉資源

?

HttpClient代碼參考https://www.jianshu.com/p/9504ecc7abad

總結

以上是生活随笔為你收集整理的【JAVA基础篇】Socket编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美极品一区二区三区 | 91亚洲精品久久久蜜桃网站 | 日韩高清www | 麻豆视频网址 | 天天躁日日躁狠狠躁av中文 | 亚洲免费成人 | 91视频高清完整版 | 国产香蕉视频在线观看 | 欧美日韩调教 | 欧洲精品视频一区二区 | 天天艹日日干 | 亚洲精品在线一区二区 | 91大片网站| 欧美成人中文字幕 | 三级性生活视频 | 麻豆影视在线观看 | www黄com| 久久www免费视频 | 日韩精品视频在线免费观看 | 六月丁香婷婷久久 | 亚洲精品在线免费 | 91av电影| 天天做天天爽 | 91在线免费观看网站 | 久久婷亚洲五月一区天天躁 | 国产精国产精品 | 狠狠狠色丁香综合久久天下网 | 这里只有精品视频在线观看 | 久久天天躁狠狠躁亚洲综合公司 | 日韩字幕在线 | 揉bbb玩bbb少妇bbb | 中文字幕网站视频在线 | 免费成人av在线看 | 国产精品视频一二三 | 色婷婷综合视频在线观看 | 国产一区私人高清影院 | 狠狠色丁香婷婷综合久小说久 | 久久国产精品影片 | 狠狠色伊人亚洲综合成人 | 九色最新网址 | 国产精选视频 | 99热只有精品在线观看 | 亚洲 精品在线视频 | 日本精品视频一区二区 | 国产精品美女久久久久久久 | 中文国产成人精品久久一 | 国产高清视频在线播放 | av免费网站在线观看 | 亚洲黄色网络 | 午夜精品区 | 人人添人人澡人人澡人人人爽 | 天天干人人 | 黄色软件视频网站 | 一本一本久久a久久 | 草久久久 | 亚洲高清网站 | 国产精品99久久久精品免费观看 | 九草在线观看 | 天堂在线一区二区 | 国产三级视频 | 狠狠干夜夜操天天爽 | 97品白浆高清久久久久久 | 久久久久国产一区二区三区 | 一本一本久久a久久精品综合小说 | 国产精品久久久久久久久久久久午夜片 | 四虎8848免费高清在线观看 | 色九色 | 亚洲综合欧美日韩狠狠色 | 欧美一级视频在线观看 | 97在线成人 | 国产精品美女久久久久久网站 | 欧美精品在线一区 | 中文在线免费一区三区 | av片免费播放 | 久久国产精品久久久 | 日韩视频中文字幕在线观看 | 特级免费毛片 | 亚洲国产精品成人综合 | 欧美在线观看视频免费 | 久久高清片 | 人人藻人人澡人人爽 | 中文字幕在线免费看线人 | 成人av在线一区二区 | 久久久网站 | 97自拍超碰 | 亚洲清纯国产 | 又黄又刺激又爽的视频 | 天天艹天天爽 | 91片黄在线观看动漫 | 91视频久久 | 91麻豆精品久久久久久 | 黄色免费大片 | 国产精品久久久久久久久久久免费看 | 国产高清不卡一区二区三区 | 精品国产理论 | 99这里只有 | 日韩av美女 | 国产99免费视频 | 中文字幕2021| 天天艹日日干 | 五月婷婷六月丁香激情 | 午夜视频在线观看一区二区三区 | 在线免费中文字幕 | 婷婷婷国产在线视频 | 精品美女在线视频 | 一区二区av | 日日摸日日添日日躁av | 99热亚洲精品 | 久久艹艹| 日韩av网站在线播放 | 国产资源中文字幕 | 日韩精品免费在线播放 | 国产精品福利午夜在线观看 | 九九综合九九 | 在线免费色视频 | 91免费的视频在线播放 | 国产免费一区二区三区网站免费 | 国产69久久久欧美一级 | 最新中文在线视频 | 中文在线字幕免费观看 | 亚洲国产精品电影在线观看 | 六月丁香激情网 | av动态图片 | 日韩中字在线 | 亚洲区另类春色综合小说校园片 | 国产一区二区电影在线观看 | 国产精品一区二区三区视频免费 | 狠狠干电影 | 久久av伊人 | 国产成人精品国内自产拍免费看 | 在线影院中文字幕 | 日韩有码在线观看视频 | 亚洲午夜精品福利 | 亚洲国产精品成人女人久久 | 国产精品一区二区久久精品 | 亚洲一区尤物 | 在线精品亚洲一区二区 | 夜夜骑天天操 | 国模一区二区三区四区 | 爱色av.com| 久99视频| 九九视频免费 | 精品国产诱惑 | 最新日韩视频在线观看 | 亚洲精品女 | 久草在线免费电影 | 又色又爽的网站 | 97在线成人| 亚洲男模gay裸体gay | 天天干天天想 | 一区二区不卡 | 一级黄毛片 | 特黄特色特刺激视频免费播放 | 综合网天天射 | 91在线视频免费91 | 怡春院av| 欧美va日韩va| 欧美激情另类 | 免费在线观看一区 | 欧美成年黄网站色视频 | 国产精品久久久久久久久久尿 | 91精品网站 | 99久久99久久精品 | 国产亚洲欧美精品久久久久久 | 国产精品区二区三区日本 | 久香蕉 | 国产69精品久久久久久久久久 | 特级西西www44高清大胆图片 | 日本系列中文字幕 | 精品视频资源站 | 九九在线国产视频 | www99久久| 天堂在线视频中文网 | 精品久久久免费视频 | 国产特黄色片 | 黄色在线网站噜噜噜 | 日韩二区在线 | 日韩系列在线 | 欧美成人aa | 美女视频免费精品 | 久久婷亚洲五月一区天天躁 | 日韩欧美一区二区在线观看 | 中文字幕a∨在线乱码免费看 | 精品国产人成亚洲区 | 久久久国产电影 | 免费的黄色的网站 | 亚洲成av片人久久久 | 天天干.com | 成人黄色电影免费观看 | 中文字幕在线视频国产 | 97超碰人人澡 | 中文字幕在线观看完整版 | 国产精品v欧美精品v日韩 | 亚州视频在线 | 中文在线天堂资源 | 天堂久久电影网 | 国产精品久久久久久久久久久免费看 | 91在线播 | 久操视频在线播放 | 成人av在线观| av一级在线| 亚洲精品大全 | а天堂中文最新一区二区三区 | 三级小视频在线观看 | 久久av福利 | 午夜精品视频在线 | 99精品99| 精品无人国产偷自产在线 | 综合色中文 | 天天操天天干天天爽 | 久久成人黄色 | 精品亚洲成a人在线观看 | 中文字幕视频一区 | 狠狠狠色 | 五月婷av | 亚洲,播放| 在线a人v观看视频 | www.国产精品 | 成年人在线免费看视频 | 天天爱天天操天天干 | 97超碰影视| 免费亚洲精品 | 天天色综合三 | japanese黑人亚洲人4k | 午夜精品视频福利 | 欧美老人xxxx18 | 96久久| 91九色porn在线资源 | 国产一区二区免费在线观看 | 精品视频不卡 | 91干干干 | 国产中文字幕在线播放 | 天天干,夜夜爽 | 午夜18视频在线观看 | 色婷婷 亚洲 | 精品国产免费人成在线观看 | 午夜三级理论 | 免费av片在线 | 在线天堂8√ | 久草在线综合 | 毛片基地黄久久久久久天堂 | 日韩国产欧美在线视频 | 麻花豆传媒mv在线观看 | 国产成人一区二区三区免费看 | 五月婷网站 | 日韩在线电影一区二区 | 欧美a√大片 | h动漫中文字幕 | 日韩精品中文字幕久久臀 | 色网站免费在线看 | 欧美一区在线观看视频 | 夜夜天天干 | 久久久69 | 手机色在线 | 国产精品伦一区二区三区视频 | 久久av网址| 麻豆国产网站入口 | 99精品在线看 | 国产精品美女视频 | 国产精品21区 | 日韩av免费大片 | 四虎www | 欧美成年人在线观看 | 91看片淫黄大片在线播放 | 精品视频中文字幕 | 国产日韩在线观看一区 | 欧美一区二区免费在线观看 | 在线免费91 | 五月婷婷爱 | ,午夜性刺激免费看视频 | 麻豆久久 | 精品1区2区 | 色婷婷狠狠五月综合天色拍 | 99视频在线播放 | 国产手机精品视频 | 中文字幕在线免费看 | 日本中文字幕系列 | 91原创在线观看 | 中文字幕免费高 | 国产精品午夜久久 | 黄色大片国产 | 成人久久18免费网站麻豆 | 国产亚洲精品久久久久久移动网络 | 天天天天天天干 | 99热最新精品 | 欧美日韩p片 | 国产一级精品视频 | av爱干| 欧美精品国产综合久久 | 亚洲波多野结衣 | 97av色| 欧美一级性视频 | 天天鲁天天干天天射 | 国产精品久久久久久电影 | 五月婷在线 | 久久激情小视频 | 日韩免费观看一区二区三区 | 奇米网777 | 国产精品九九九九九 | 亚洲高清激情 | 玖玖精品视频 | 亚洲成人一二三 | 国产精品久久久久久欧美 | 日韩中文字幕免费视频 | 国产精品久久一区二区三区, | 精品亚洲成人 | 国产在线成人 | 一区二区三区播放 | 伊人久久精品久久亚洲一区 | 欧美日韩另类在线 | 97色婷婷| 中文字幕字幕中文 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 日韩精品一区二区三区三炮视频 | 亚洲年轻女教师毛茸茸 | 97国产一区| 免费成人结看片 | 欧美激情综合五月色丁香小说 | 手机av看片 | 色综合咪咪久久网 | 久草在线手机观看 | 特级毛片在线免费观看 | 狠狠躁日日躁 | 麻豆94tv免费版 | 天堂网av 在线 | 黄色的网站免费看 | 欧美一区二区在线免费观看 | 在线看片中文字幕 | 91在线观看视频 | 日本色小说视频 | 国产精品11 | 欧美成人基地 | 日韩电影中文字幕在线观看 | 精品久久视频 | 天天草天天摸 | 国产精品涩涩屋www在线观看 | 国产在线91精品 | 一区二区欧美在线观看 | 九月婷婷综合网 | 97国产精品视频 | 精品国产资源 | 久久久久免费精品国产小说色大师 | 久久久久成人精品免费播放动漫 | 欧美精彩视频在线观看 | 波多野结衣网址 | 国产精品不卡在线观看 | 国产成人精品一区在线 | 91视频88av | 精品国产久 | 91成人精品国产刺激国语对白 | 国产精品久久一区二区三区, | 中文字幕日韩精品有码视频 | 日韩av区| 一级片黄色片网站 | 婷婷丁香在线观看 | 日韩午夜精品福利 | 国语自产偷拍精品视频偷 | 国产高清精品在线观看 | 激情偷乱人伦小说视频在线观看 | 日韩特级片 | 国产精品久久99综合免费观看尤物 | 国产资源网 | 国产黄色视 | 在线国产精品一区 | 西西大胆啪啪 | 国产在线观看你懂得 | 992tv成人免费看片 | 99视频在线精品国自产拍免费观看 | 一色屋精品视频在线观看 | 精品免费视频 | 综合婷婷久久 | 97人人超 | 91九色丨porny丨丰满6 | 中文字幕在线观看视频一区 | 午夜久久福利视频 | 天天爽天天搞 | 综合网伊人 | 国产精品一区在线观看 | 免费成人短视频 | 日韩美一区二区三区 | 久久综合精品一区 | 精品女同一区二区三区在线观看 | 亚洲精品视频在线免费 | 国产亚洲精品成人av久久ww | 91成人免费观看视频 | 国产免费亚洲高清 | 四虎成人精品在永久免费 | 国产在线播放一区二区 | 久久久久久久久久久福利 | 精品一区二区三区四区在线 | 开心色激情网 | 国产群p| 久久久综合 | 最近中文字幕在线播放 | av三级在线免费观看 | 最新色站 | 国产一级片直播 | 国产精品免费大片视频 | 夜色在线资源 | 久久草网 | 亚洲最新av在线网站 | 中文字幕黄色 | 日日爽夜夜操 | 亚洲另类视频在线 | 69亚洲视频 | 欧美成人tv | 亚洲女同ⅹxx女同tv | 精品国产一区二区三区久久影院 | 国产亚洲视频系列 | 狠狠色丁婷婷日日 | 毛片永久新网址首页 | 99久久99热这里只有精品 | 日韩视频在线不卡 | 欧美色伊人 | 天天操夜夜干 | 欧美一级久久 | 成年人视频在线 | 日韩欧美国产精品 | 免费一级特黄录像 | 香蕉一区 | 亚洲国产精品999 | 在线视频app | 久久久久免费 | 免费在线播放 | 99久久精品国产欧美主题曲 | 久久五月天婷婷 | 欧美日韩精品影院 | 91亚洲国产成人久久精品网站 | 国产aa免费视频 | 亚洲国产日本 | 在线观看免费视频你懂的 | 欧洲av不卡 | 一区二区亚洲精品 | 国产视频欧美视频 | 国产成人精品国内自产拍免费看 | 五月婷婷开心 | 中文字幕在线国产 | 粉嫩av一区二区三区四区五区 | 国产精品久久久久久久免费大片 | 日本高清免费中文字幕 | 天天干天天干天天射 | 91中文在线 | 久久久久久国产精品亚洲78 | 欧美一级性视频 | 国产精品国产毛片 | 日韩动态视频 | 69国产盗摄一区二区三区五区 | 国产黄在线播放 | 九九综合久久 | 精品在线视频播放 | 国产激情电影综合在线看 | 一二区精品 | 在线免费精品视频 | 国产视频午夜 | 在线免费观看国产视频 | 狠狠色丁香久久综合网 | 国产在线精品一区二区 | 在线午夜 | 中文字幕一区二区三区乱码在线 | 丁香五婷 | 久久99亚洲精品久久 | 五月婷婷播播 | 免费成人黄色av | 亚洲码国产日韩欧美高潮在线播放 | 亚洲精品理论 | 亚洲综合视频在线观看 | 精品欧美在线视频 | 91桃色在线播放 | 日韩国产高清在线 | 91福利试看 | 久久精品日本啪啪涩涩 | 一区二区三区在线影院 | 欧美在线观看视频一区二区 | 日日爽视频 | 日韩女同一区二区三区在线观看 | 欧美日韩一区二区免费在线观看 | 日韩精品视频在线免费观看 | 久久久久综合精品福利啪啪 | 国产破处视频在线播放 | 伊人影院av | 天天综合婷婷 | 日韩羞羞| 国产资源免费在线观看 | 久久国产美女视频 | 精品免费在线视频 | 久久免费看a级毛毛片 | 可以免费观看的av片 | 国产91在| 国产成人久久 | 亚洲性少妇性猛交wwww乱大交 | 狠狠色伊人亚洲综合网站野外 | 丁香婷婷成人 | 国产一级在线观看视频 | 毛片区| 亚洲国产免费看 | 在线国产黄色 | 99免费看片| 一区二区三区在线播放 | www.成人sex| 97看片网| 国产精品久久久久久久久久免费 | 午夜精品久久久久久久久久 | 亚洲综合射 | 色婷婷一 | 91视频啊啊啊 | 亚洲欧美视频在线 | 色网址99| 国产视频日韩视频欧美视频 | 色射色 | 91视频com| 久久免费看视频 | 久久精品这里都是精品 | 一区在线观看视频 | 久久草草热国产精品直播 | 国产精品亚洲a | 91成人天堂久久成人 | 国产中的精品av小宝探花 | 久久天天综合网 | 精品中文字幕在线 | 天天躁天天狠天天透 | 色的网站在线观看 | 四虎影视精品成人 | 日日精品 | www.av小说 | 五月婷婷色 | 青青草华人在线视频 | 久久精品这里热有精品 | 色悠悠久久综合 | 五月综合久久 | 亚洲精品一区二区三区在线观看 | 亚洲午夜av久久乱码 | 成人91在线 | 西西44人体做爰大胆视频 | 人人讲下载 | 亚洲精品videossex少妇 | 国产精品久久久一区二区 | 国产成人精品在线播放 | 国产视频一区在线免费观看 | 久久久免费 | 91在线精品视频 | 中文字幕人成乱码在线观看 | 成人sm另类专区 | 97香蕉超级碰碰久久免费软件 | 久久精品影片 | 久久精品xxx | 日韩精品一区二区三区免费观看视频 | 免费在线观看成人av | 色综合久久88色综合天天免费 | av高清在线 | 久久96国产精品久久99漫画 | 黄色免费电影网站 | 国产视频一区二区在线播放 | 99久久超碰中文字幕伊人 | 国产精品观看 | 人人干人人模 | 日韩免费播放 | 国内精品久久久精品电影院 | www操操 | av软件在线观看 | 国产高清在线免费视频 | 黄色小网站在线观看 | 久久久久欠精品国产毛片国产毛生 | 欧美日韩在线观看一区二区三区 | 久久久久久国产精品免费 | 国产高清在线a视频大全 | 国产高清精品在线观看 | 久久久久国 | 天天做日日做天天爽视频免费 | 中文字幕一区二区三区四区在线视频 | 欧美日韩国产在线精品 | av成年人电影 | 国产精品一区二区 91 | 免费视频在线观看网站 | 99re视频在线观看 | 97超碰人人看 | 黄色片网站av | 美女精品国产 | 国产在线观看一 | 日韩理论片在线观看 | 日日操日日插 | 五月天中文字幕 | 欧美狠狠操 | av成人在线播放 | 免费日韩av片| 亚洲国产精品成人综合 | 成人永久在线 | 国产精品一区二区白浆 | 综合成人在线 | 日韩在线电影观看 | www.久久色 | 久草在线视频网 | 欧美激情操 | 久久伊人八月婷婷综合激情 | 最近更新中文字幕 | 久久婷婷丁香 | 国产精品第 | 天天干,天天射,天天操,天天摸 | 综合天堂av久久久久久久 | 九九免费在线看完整版 | 国产一级视屏 | 五月亚洲| 日韩精品久久一区二区 | 日韩网站视频 | 国产在线精品二区 | 亚洲精品一区二区三区高潮 | 日韩有码在线播放 | 色综合久久五月 | av一区二区三区在线 | 中国美女一级看片 | 亚洲电影黄色 | 天天综合导航 | 国产精品一区二区免费视频 | 久久综合加勒比 | 99在线精品视频观看 | 国产亚洲婷婷免费 | 色综合久久综合 | 美女视频a美女大全免费下载蜜臀 | 毛片.com| 成人毛片一区二区三区 | 99草视频在线观看 | 国产精品激情偷乱一区二区∴ | 69夜色精品国产69乱 | 波多野结衣理论片 | 国内免费久久久久久久久久久 | 成人av片在线观看 | 国产免费又爽又刺激在线观看 | 天天干,天天干 | 玖玖精品视频 | 91大神精品视频 | 人人舔人人插 | 综合天天 | 天天摸日日摸人人看 | 天天操天天舔天天爽 | 日韩av不卡在线观看 | 精品一二三四视频 | 欧美一区二视频在线免费观看 | 夜色成人av| 国产第页| 一二三精品视频 | 欧美国产高清 | 国产午夜精品久久久久久久久久 | 国产自偷自拍 | 国产一区二区三区高清播放 | 超碰日韩 | 日韩av黄| 99这里只有精品视频 | av一区在线播放 | 国产少妇在线观看 | 99久久久免费视频 | av成人动漫| 特级西西444www大胆高清无视频 | 超碰国产在线 | 天天av资源 | 亚洲免费色| 精品av在线播放 | 五月婷婷综合色拍 | 99理论片 | 久久精品牌麻豆国产大山 | 麻豆 91 在线 | 免费观看黄 | 欧美一级艳片视频免费观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 亚洲日本三级 | 日韩欧美69 | 国产特级毛片aaaaaa毛片 | 国产精品欧美一区二区 | 色视频网站免费观看 | 久久久久久久久久久久国产精品 | 男女视频91 | 亚洲欧洲中文日韩久久av乱码 | 日韩丝袜在线观看 | 国产一级大片在线观看 | 天天综合在线观看 | 911av视频| 黄网站色| 天天综合网在线观看 | 久久综合免费视频 | 韩国视频一区二区三区 | 久久综合久久综合久久 | 99精品视频免费观看视频 | 波多野结衣久久精品 | 国产精品99久久久久久宅男 | 91亚洲欧美激情 | 91喷水| 国产精彩视频一区 | 黄色av一区二区三区 | 探花视频在线观看 | 亚洲精品456在线播放 | 久久无码av一区二区三区电影网 | 国产精品美女久久久久久久 | 麻豆91在线| 中文字幕免费在线看 | 免费激情网 | 最新国产中文字幕 | 国产片免费在线观看视频 | 久久99精品视频 | 五月天天色 | 久久99精品久久只有精品 | 天天摸天天干天天操天天射 | 欧美精品三级在线观看 | 国产精品一区二区av影院萌芽 | 婷婷丁香在线视频 | 久久国产影视 | 香蕉视频免费在线播放 | 国产精品美女久久久久久2018 | 在线黄色av | 午夜少妇av| 婷婷伊人五月 | 久久婷亚洲五月一区天天躁 | 黄色三级在线观看 | 亚洲天堂网在线观看视频 | av超碰在线 | 日韩av图片| 久久久999| 在线观看成人毛片 | 国产成人一区二区三区电影 | 久久久久久久久久久久久国产精品 | 国产精品成人久久久久 | 久久久久久久久久久久久影院 | 亚洲国产成人在线观看 | 在线观看国产高清视频 | 久久精品日产第一区二区三区乱码 | 久在线观看视频 | 色婷婷亚洲精品 | 亚洲精品9 | 国产免费观看久久黄 | 亚洲片在线观看 | 亚洲成人软件 | 日韩一区正在播放 | 久久试看 | free,性欧美 九九交易行官网 | 久久人人97超碰精品888 | 亚洲国产精品一区二区尤物区 | 天天操天天操天天操天天操 | 免费av福利| 精品国精品自拍自在线 | 成人av电影免费 | 黄色毛片视频免费观看中文 | 久久久久99精品国产片 | av东方在线 | 黄色大片入口 | 美女网色 | av中文字幕在线观看网站 | 午夜久久电影网 | 国产黄色片免费看 | 中文字幕888 | 亚洲精品一区二区三区四区高清 | 黄色小网站在线观看 | 黄在线免费观看 | 成人午夜影院在线观看 | 亚洲最新av在线网站 | 国产精品乱码久久久久 | 一级片免费观看视频 | 欧美视频网址 | 国产精品久久一区二区无卡 | 亚洲精品国产精品乱码不99热 | 一级免费观看 | 91色蜜桃 | 国产视频精品在线 | 麻豆国产视频下载 | 亚洲精品国产麻豆 | 色婷婷中文| 黄色免费网站大全 | 免费三级黄 | 九色琪琪久久综合网天天 | 中文字幕国产一区二区 | 欧洲精品久久久久毛片完整版 | 麻豆传媒在线免费看 | 久久99精品久久久久婷婷 | av中文字幕在线看 | 国产原创av片 | av免费电影网站 | 一区二区中文字幕在线播放 | 国产精品wwwwww | 亚洲综合成人婷婷小说 | 欧美地下肉体性派对 | 制服丝袜欧美 | 欧美日韩性| 久久美女电影 | 国产精品久久久久永久免费 | 午夜精品久久久久久久久久 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 黄色日本免费 | 五月婷婷久久丁香 | 首页国产精品 | 521色香蕉网站在线观看 | 黄色软件网站在线观看 | 97超碰人人澡人人爱学生 | 色综合狠狠干 | 久久久久国产精品免费网站 | 国产精品一区二区美女视频免费看 | 久久伦理电影 | 国产亲近乱来精品 | 日韩精品一区二区三区免费视频观看 | 亚洲首页 | 天天综合网~永久入口 | 久久久久久综合网天天 | 福利一区二区 | 日韩精品视频在线免费观看 | 亚洲精品乱码白浆高清久久久久久 | 国产精品毛片完整版 | 亚州视频在线 | 日韩在线视频一区 | 久久久久久片 | 欧美日韩一区二区三区视频 | 中文不卡视频 | 日韩高清一二三区 | 国产中文字幕免费 | 伊人五月在线 | 国产在线观看地址 | 免费午夜av | 免费a网站| 激情视频一区 | 欧美色道| 国产精品毛片一区视频 | 国产日韩欧美在线 | 国产精品日韩在线 | 国产小视频免费在线观看 | 欧美夫妻性生活电影 | 久久视频这里只有精品 | 日本公乱妇视频 | 成人影视免费 | 欧美成人免费在线 | 麻豆av电影 | 最新91在线视频 | 亚洲精品国产品国语在线 | 91视频国产高清 | 久久国产精品久久精品国产演员表 | 成人91av| 亚洲精品国产精品乱码在线观看 | 国产精品毛片一区二区 | 日韩在线字幕 | 国产麻豆剧果冻传媒视频播放量 | 国产一区免费在线 | 久久一区二区三区四区 | 国产精品激情在线观看 | 日韩国产精品毛片 | av色网站 | 99热超碰 | 成人动漫视频在线 | 欧美整片sss | 人人dvd | 成人av网站在线播放 | www.啪啪.com| 最新国产精品亚洲 | 亚洲一区久久久 | 国产视频一二三 | 黄色av高清| ww视频在线观看 | 91高清免费看| 欧美91视频| 日韩最新av| 九九久久久久久久久激情 | 五月婷婷免费 | 中文字幕免费久久 | 九月婷婷综合网 | 久久久久久久久久伊人 | 人人干人人做 | 亚洲精品自在在线观看 | 91精品国产高清自在线观看 | 日韩特黄av | 日韩一区二区三区免费电影 | 超碰在线观看av | 国产偷国产偷亚洲清高 | 亚洲日本在线一区 | 国产91精品欧美 | 国产综合精品一区二区三区 | 国产黄在线免费观看 | 日韩在线无 | 久久久亚洲精华液 | 五月天激情综合 | 亚洲乱码在线观看 | av在线网站免费观看 | 国产黄色在线观看 | 蜜臀av夜夜澡人人爽人人桃色 | 国产一区二区在线免费观看 | 国产精品免费大片视频 | 91av在线免费视频 | 丁香五婷 | 91免费在线播放 | 人人澡人人添人人爽一区二区 | 五月婷婷综 | 操久久网| 狠狠操电影网 | 91香蕉视频好色先生 | 久久久 精品 | 久草五月 | 久久999精品 | 在线看免费 | 亚洲成av人片一区二区梦乃 | 激情六月婷婷久久 | 国产不卡在线视频 | 人人爽人人看 | 日本久久综合视频 | 国产999视频 | www.狠狠插.com| 中文字幕字幕中文 | 亚洲国产精品久久久久久 | 成人免费一区二区三区在线观看 | 精品国产中文字幕 | 久久精品国产亚洲aⅴ | 天天操天天射天天操 | 亚洲 中文 欧美 日韩vr 在线 | 一区三区视频在线观看 | 黄污在线看 | 97电院网手机版 | 久久深爱网 | 亚洲日本激情 | 色吊丝在线永久观看最新版本 | 精品一区二区三区久久 | av电影av在线 | 成 人 免费 黄 色 视频 | 国产精品久久嫩一区二区免费 | 日韩欧美视频免费观看 | 97精品电影院 | 国产免费一区二区三区最新 | 97夜夜澡人人爽人人免费 | 国产高清精品在线观看 | 亚洲欧洲av在线 | 天天天干天天天操 | 欧美一级免费高清 | 亚洲国产中文字幕在线观看 | 亚洲国产中文字幕在线视频综合 | 亚洲精品激情 | 一二区电影| 中文免费观看 | 日韩高清毛片 | 天天操狠狠操 | 国产69久久久欧美一级 | 91污在线 | 激情av网址 | 免费看的黄色网 | 国内精品久久久久久中文字幕 | 超碰九九 | 在线免费看黄网站 | 欧美日韩一区二区三区视频 | 精品国产视频一区 | 久久亚洲精品国产亚洲老地址 | 亚洲综合在线一区二区三区 | www.伊人网.com | 欧美精品久久久久性色 | 午夜久久久影院 | 亚洲精品国精品久久99热一 | 国产精品成人一区二区 | 国产一级二级在线播放 | 免费精品久久久 | 久久伦理影院 | 国产精品久久久久久久99 | 97超碰精品 | a级一a一级在线观看 | 99精品国产高清在线观看 | 麻豆免费在线播放 | www激情网 | 欧洲视频一区 | 久久网站免费 | 麻豆一区在线观看 | 最近免费中文字幕mv在线视频3 | 一二三区视频在线 | 亚洲综合成人专区片 | 日本少妇视频 | 国产亚洲精品久久网站 | 在线观看深夜福利 | 在线免费视频a | 狠狠色丁香久久婷婷综 | 黄色视屏在线免费观看 | 成 人 黄 色 视频 免费观看 | 黄色影院在线免费观看 | 国产一线天在线观看 | 亚洲视频1 | 四虎在线免费观看视频 | 在线观看av小说 | 黄色av成人在线观看 | 免费av网址大全 | 国产在线观看国语版免费 | 高清不卡毛片 | 99久久精品免费 | 91丨九色丨蝌蚪丰满 | 日本精品久久 | 亚洲成人国产 | 亚洲国产精品va在线看黑人动漫 | 日韩成人看片 | 久久国产精品视频观看 | av在线免费观看不卡 | 五月天色丁香 | 欧美91片| 手机av片| 日韩在线看片 | 天天爽天天碰狠狠添 | www.狠狠色 | 国产黄色免费观看 | 91av官网 | 国产免费国产 | 久久精品国产v日韩v亚洲 | 亚洲午夜精品福利 | 超碰97中文 | 在线国产能看的 | 国产精品国产三级国产aⅴ入口 | 天天操天天能 |