关于socket tcp/ip的理解
2015-12-08 19:41
666 查看
Http和Socket:http是只有客户端请求服务器才会响应,服务器不能主动发送东西。而socket是双向的,建立连接两边都可以主动发送。
http的两种方法:get和post
socket的:tcp 和udp。tcp,是一种提供可靠数据传输的通用协议,udp是一个面向无连接的协议。
服务器代码
注意,只有调用了socket.shutdownOutput()或者outputStream.flush()时候才会向客户端发送,客户端的也是一样
android客户端代码
当然要记得在AndroidManifest.xml加入联网权限。还有,安卓4.0以上都不能在主线程里访问网络
http的两种方法:get和post
socket的:tcp 和udp。tcp,是一种提供可靠数据传输的通用协议,udp是一个面向无连接的协议。
服务器代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class AndroidService { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub ServerSocket ss=new ServerSocket(3000); while(true){ Socket socket=ss.accept(); new Thread(new runn(socket)).start(); } } } class runn implements Runnable{ Socket socket; public runn(Socket socket) { // TODO Auto-generated constructor stub this.socket=socket; } public void run() { // TODO Auto-generated method stub String line=null; InputStream in; OutputStream out; String str="hello world"; try { out=socket.getOutputStream(); in=socket.getInputStream(); BufferedReader bff=new BufferedReader(new InputStreamReader(in)); while((line=bff.readLine())!=null){ System.out.println(line); out.write(line.getBytes("utf-8")); } out.flush(); socket.shutdownOutput(); out.close(); bff.close(); in.close(); socket.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
注意,只有调用了socket.shutdownOutput()或者outputStream.flush()时候才会向客户端发送,客户端的也是一样
android客户端代码
package com.example.sockettcpclient; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { Socket socket; String buffer=""; TextView tv; Button btn; EditText edt; String get; public Handler handler=new Handler() { @Override public void handleMessage(Message msg) { //super.handleMessage(msg); if(msg.what==0x11){ Bundle bundle=msg.getData(); tv.append("from service:"+bundle.getString("msg")+"\n"); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv=(TextView)findViewById(R.id.tv); btn= (Button) findViewById(R.id.btn); edt= (EditText) findViewById(R.id.edt); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { get = edt.getText().toString(); new MyThread(get).start(); } }); } class MyThread extends Thread{ String text; public MyThread(String str){ text=str; } @Override public void run() { Message msg=new Message(); msg.what=0x11; Bundle bundle=new Bundle(); bundle.clear(); try { Socket socket=new Socket(); InetSocketAddress address=new InetSocketAddress("10.10.114.3",3000); socket.connect(address); OutputStream out=socket.getOutputStream(); out.write(("android客户端"+text).getBytes("utf-8")); out.flush(); socket.shutdownOutput(); InputStream in=socket.getInputStream(); BufferedReader bff=new BufferedReader(new InputStreamReader(in)); String line=null; buffer=""; while ((line=bff.readLine())!=null){ buffer=buffer+line; } bundle.putString("msg", buffer.toString()); msg.setData(bundle); handler.sendMessage(msg); bff.close(); out.close(); in.close(); socket.close(); }catch (SocketTimeoutException e){ e.printStackTrace(); }catch (Exception a){ a.printStackTrace(); } } } }
当然要记得在AndroidManifest.xml加入联网权限。还有,安卓4.0以上都不能在主线程里访问网络
相关文章推荐
- 百度地图自定义图层----BMapTileCutterJava切图工具网络版
- RBM(受限波尔兹曼机)和 DBN(深信度神经网络)
- TCP三次握手
- java 发送http请求
- 网络程序开发实验报告
- Linux基础网络设置
- 调用 WebService 请求因 HTTP 状态 407 失败
- iOS7 打开http使用方法
- (六)、nodejs中的express框架获取http参数
- 深度神经网络结构以及Pre-Training的理解
- Http协议介绍
- 使用URLConnection发送GET和POST请求的简单示例
- 如何实现文件增量同步——算法
- Apache 配置HTTPS协议搭载SSL配置
- eclipse:报错信息The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
- 虚拟化实践之一:基于ISCSI网络共享磁盘测试实验
- android API23 HttpClient 废弃解决方案
- com.android.dex.DexException: Multiple dex files define Lorg/apache/http/entity/mime/FormBodyPart;
- Android实现网络多线程断点下载介绍
- 基本网络概念