关于socket tcp/ip的理解
来源:互联网 发布:战争程序员白濑 动漫 编辑:程序博客网 时间:2024/05/21 19:34
Http和Socket:http是只有客户端请求服务器才会响应,服务器不能主动发送东西。而socket是双向的,建立连接两边都可以主动发送。
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 stubthis.socket=socket;}public void run() {// TODO Auto-generated method stubString 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 exceptione.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以上都不能在主线程里访问网络
0 0
- 关于socket tcp/ip的理解
- Tcp/IP的理解-socket
- socket,TCP/IP的理解
- 对TCP/IP,socket,HTTP的理解
- 对TCP/IP 与 Socket 的理解
- TCP/IP、Http、Socket的关系理解
- Android tcp/ip socket http的理解
- 关于 :TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 百度地图自定义图层----BMapTileCutterJava切图工具网络版
- hdu4864 贪心+平衡二叉搜索树(map)
- 机器学习Python环境安装
- coderforce 489B B. BerSU Ball
- lightoj 1043 - Triangle Partitioning
- 关于socket tcp/ip的理解
- ajax
- Excel Sheet Column Title
- STM32库函数(3):库文件stm32f10x_flash.c内的函数
- nyoj A+B Problem IV【实数a+b】大数
- 相电压、线电压、相电流、线电流
- 自定义滑动选取价格
- 自定义控件(一)
- poj 3468 A Simple Problem with Integers - Splay