android网络通信————Scoket

今天基于eclipse构建了一个简单的服务器端,完成了客户端和服务器端的简单通信,下面记录一下自己学习的成果。


Socket,俗称套接字,相当于一个接口,一个服务器有很多接口,提供很多服务,每一种服务对应一个scoket,服务器就像一个插座,socket就像一个插头,对应的socket去匹配对应的服务器接口。Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,一组接口。Socket用于描述ip地址和端口,是一个通信的句柄。

服务器端对应socket:

 ServerSocket:服务器的接口,另外必须定义一个socket来接收服务器端获得的socket。

客户端对应socket:

Socket:用于传输及获得数据。


关于socket的构造方法,如果有不懂的同学请自行查阅,这里就不过多叙述了。下面开始贴代码~

服务器端(使用的是eclipse for javaee版本,tomcat为服务器,java语言编写)

  1. import java.io.IOException;  
  2. import java.io.OutputStream;  
  3. import java.net.ServerSocket;  
  4. import java.net.Socket;  
  5.   
  6. public class MyServer {  
  7.     public static void main(String[] args) {  
  8.         try {  
  9.             ServerSocket server = new ServerSocket(8899);  
  10.             while (true) {  
  11.                 System.out.println("execute 1\n");  
  12.                 Socket client = server.accept();  
  13.                 System.out.println("execute 2\n");  
  14.                 OutputStream out = client.getOutputStream();  
  15.                 System.out.println("execute 3\n");  
  16.                 String msg = "hello android";  
  17.                 out.write(msg.getBytes());  
  18.                 System.out.println("execute 4\n");  
  19.                 client.close();  
  20.             }  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.   
  25.     }  
  26. }  

成功运行如上图所示,服务器已经开启


下面是android客户端的代码,由于布局很简单,我就不贴了,就两个控件,一个按钮一个textview。


import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    private Button button;
    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textview);
        button = (Button) findViewById(R.id.httppost);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
		//开启新线程进行网络通信
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Socket socket= null;
                        try {
			    //新建socket参数一为你电脑的ip地址,参数二为端口号
                            socket = new Socket("10.16.224.147",8899);
                            Log.e("socket","success");
			    //得到客户端传来的输入流
                            InputStream inputStream=socket.getInputStream();
			    //读取数据
                            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                            StringBuilder builder=new StringBuilder();
                            String line="";
                            if ((line=bufferedReader.readLine())!=null){
                                builder.append(line);
                            }
                            inputStream.close();
                            Message message=new Message();
                            message.what=1;
                            message.obj=builder.toString();
                            handler.sendMessage(message);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }


                    }
                }).start();

            }
        });
	//线程接收完毕数据后更新textview的内容
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if (msg.what==1){
                    textView.setText(msg.obj.toString());

                }

            }
        };

    }

}

效果如图,一开始的时候:


点击按钮后

以及点击按钮后的服务器端的变化情况:





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值