客户端发送请求连接SYN报文(SYN=1,seq=client_isn)
服务端在接受连接后返回ACK报文,并为这次链接分配资源(SYN=1,seq=client_isn,ack = client_isn+1)
客户端接收到报文后再次返回ACK报文给服务端(确认收到报文),服务端接受到报文后,就成功建立了TCP连接(SYN=0,seq=client_isn+0,ack = client_isn+1)
流
关闭连接
- 客户端发起中断连接请求,向服务端发送Fin报文
- 服务端接受到报文后,返回一个Ack,客户端收到的ACK报文后进入Fin等待状态
- 等待服务端确认事情做完了之后就发送一个Fin报文,通知说服务器完成了数据,可以关闭了
- 客户端收到后向服务器发送一个Ack后再次进入等待状态,服务端接收到Ack后就
可以直接关闭了,客户端在等待30s后就会关闭
<pre>
package com.marco.httpconnectionapplication;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.BasicUserPrincipal;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.;
import java.net.;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private TextView tvContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvContent = (TextView) findViewById(R.id.textView);
}
//HttpGet方式
public void onBtnGet(View view) {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
StringBuffer sb = new StringBuffer();
try {
//通过URl获取到访问地址
URL url = new URL(params[0]);
//获取到链接的Connection资源
URLConnection connection = url.openConnection();
//通过connection获取数据流,并将获得的字节流数据转成字符流
InputStream ins = connection.getInputStream();
InputStreamReader insReader = new InputStreamReader(ins);
//将获得的字符流数据转化成更容易处理的字符输入流
BufferedReader br = new BufferedReader(insReader);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
sb.append(line);
}
//最后关闭流处理
br.close();
insReader.close();
ins.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(sb.toString().trim())) {
return "result null";
} else {
return sb.toString();
}
}
@Override
protected void onPostExecute(String s) {
tvContent.setText("get" + s);
}
}.execute("http://fanyi.youdao.com/openapi.do?keyfrom=testMarco&key=1197299496&type=data&doctype=json&version=1.1&q=good");
}
//HttpPost方式
public void onBtnPost(View view) {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
StringBuffer sb = new StringBuffer();
try {
//通过URl获取到访问地址
URL url = new URL(params[0]);
//获取到链接的Connection资源
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "utf-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("keyfrom=testMarco&key=1197299496&type=data&doctype=json&version=1.1&q=good");
bw.flush();
//通过connection获取数据流,并将获得的字节流数据转成字符流
InputStream ins = connection.getInputStream();
InputStreamReader insReader = new InputStreamReader(ins);
//将获得的字符流数据转化成更容易处理的字符输入流
BufferedReader br = new BufferedReader(insReader);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
sb.append(line);
}
//最后关闭流处理
br.close();
insReader.close();
ins.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(sb.toString().trim())) {
return "result null";
} else {
return sb.toString();
}
}
@Override
protected void onPostExecute(String s) {
tvContent.setText("post" + s);
}
}.execute("http://fanyi.youdao.com/openapi.do");
}
HttpClient client;
public void onBtnClientGet(View view) {
client = new DefaultHttpClient();
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
String urlString = params[0];
HttpGet get = new HttpGet(urlString);
try {
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
tvContent.setText("httpClientGet" + s);
}
}.execute("http://fanyi.youdao.com/openapi.do?keyfrom=testMarco&key=1197299496&type=data&doctype=json&version=1.1&q=good");
}
public void onBtnClientPost(View view) {
client = new DefaultHttpClient();
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
try {
String urlString = params[0];
HttpPost post = new HttpPost(urlString);
List<NameValuePair> values = new ArrayList<NameValuePair>();
values.add(new BasicNameValuePair("keyfrom", "testMarco"));
values.add(new BasicNameValuePair("key", "1197299496"));
values.add(new BasicNameValuePair("type", "data"));
values.add(new BasicNameValuePair("doctype", "json"));
values.add(new BasicNameValuePair("version", "1.1"));
values.add(new BasicNameValuePair("q", "good"));
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
tvContent.setText("httpClientPost" + s);
}
}.execute("http://fanyi.youdao.com/openapi.do");
}
// TCP客户端
public void onTCPClientStart(String ip, int port) {
try {
final Socket socket = new Socket(ip, port);
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
Socket socket;
ServerSocket serverSocket;
//TCP服务端
public void onTCPServerStart(int port) {
try {
serverSocket = new ServerSocket(port);
new Thread(new Runnable() {
@Override
public void run() {
try {
socket = serverSocket.accept();
ChatSocket chatSocket = new ChatSocket(socket);
chatSocket.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
// UDP
// SOAP
}
</pre>
<pre>
package com.marco.httpconnectionapplication;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
User: KdMobiB
Date: 2016/9/26
-
Time: 18:12
*/
public class ChatSocket extends Thread {
Socket socket;public ChatSocket(Socket socket) {
this.socket = socket;
}@Override
public void run() {
super.run();
if (isAlive()){
while (true){
read();
}
}
}public void read(){
try {
BufferedReader reader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line =null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}public void write(String out){
try {
socket.getOutputStream().write(out.getBytes("utf-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
</pre>