Socket网络协议之二

服务器端:java代码php

package com;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.print("接受串:");
  try{
   ServerSocket server=new ServerSocket(1116);
   while(true){
   Socket socket=server.accept();
   BufferedWriter writer=new BufferedWriter(
     new OutputStreamWriter(socket.getOutputStream()));
   writer.write("dadasdsada");
   writer.flush();     //清空缓存中的数据
   writer.close();
   }
  }
  catch(IOException e){
   e.printStackTrace();
  }
 }
}

客户端android代码:java

package com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import com.android_clinent.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class client extends Activity{
 
 Button btn;
 TextView txt;
 String line;
 String HOST="192.168.0.105";
 int PORT=1116;
 public void onCreate(Bundle SavedInstanceState){
  super.onCreate(SavedInstanceState);
  setContentView(R.layout.main);
  initControl();
 }
 public void initControl(){
  btn=(Button)findViewById(R.id.button1);
  txt=(TextView)findViewById(R.id.editText1);
  btn.setOnClickListener(new ReListener());
 }
 class ReListener implements OnClickListener{
  @Override
  public void onClick(View arg0) {
   //在android4.0以上的系统中,是不容许在主线程里面去执行网络相关的请求,不然会报错:NetworkOnMainThreadException
   new Thread(){
    public void run(){
   // TODO Auto-generated method stub
   try{
    Socket socket=new Socket(HOST,PORT);
    BufferedReader br=new BufferedReader(
      new InputStreamReader(socket.getInputStream()));
    line=br.readLine();
    if(line!=null)
    {
     //不要在UI线程以外访问Andoid的UI组件包,  用View.post(Runnable)
     txt.post(new Runnable(){
      @Override
      public void run() {
       // TODO Auto-generated method stub
       txt.setText(line);
      }
      
     });
     
    }else
    {
     txt.setText("有问题");
    }
    br.close();
   }   
   catch(UnknownHostException e){
    e.getStackTrace();
   }
   catch(IOException e){
    e.getStackTrace();
   }
  }
   }.start();
  
 }
}
}

服务端运行结果:android

接受串:

客户端android真机上运行结果:web

执行前:缓存

 

执行后:服务器

 

另外在配置文件中记得加上权限:<uses-permission android:name="android.permission.INTERNET">
       测试的时候先启动服务端,而后启动客户端,点击按钮就可获取到服务端信息。这是在是一个灰常简单的有关android socket的小例子,能够初步对socket有个简单的了解,这个笔记就先记到这里!
网络

 

参考文章:http://www.apkbus.com/forum.php?mod=viewthread&tid=122400app

相关文章
相关标签/搜索