Android使用Socket编程连接服务端
jopen
10年前
首先,在一个Java工程中这样写
import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class SimpleServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(30000); while (true) { Socket socket = serverSocket.accept(); InetAddress inetAddress = socket.getInetAddress(); System.out.println("IP地址的完全限定域名是:"+inetAddress.getCanonicalHostName()+"\n IP地址字符串为:"+ inetAddress.getHostAddress()+"\n 主机名为:"+inetAddress.getHostName()); OutputStream outputStream = socket.getOutputStream(); outputStream.write("这是来自服务器的一句话\n".getBytes("utf-8")); outputStream.close(); socket.close(); } } }
然后,在一个android 工程中这样写(布局上只有一个TextView,就不写了)
package com.example.socketandroid; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { TextView show; String ip = "10.0.2.2"; String line; Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.arg1 == 1) { String textFrom = msg.obj.toString(); show.setText(textFrom); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = (TextView) findViewById(R.id.show); new Thread() { public void run() { try { Socket socket = new Socket(ip, 30000); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(socket.getInputStream())); line = bufferedReader.readLine(); Message message = handler.obtainMessage(); message.obj = line; message.arg1 = 1; handler.sendMessage(message); } catch (IOException e) { e.printStackTrace(); } }; }.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
当然 不要忘了添加网络权限
接下来,先运行java工程,再运行android工程,可以看到textView变成了"这是来自服务器的一句话"