解决方案 »
- listview 异步加载网络图片问题
- 关于socket通信服务端的问题
- 这里有人会使用android自动化测试吗?方法一般都是什么?赐教
- 编译最新版本的android2.2,找不到javax.tools包,编译报错
- 跪求解决方法
- 怎样使用百度地图android sdk做类似微信摇一摇搜附近的功能
- android中多个editText扫描后发生自动跳转,求大神解决
- 代码不起作用
- i-Jetty发布应用偶尔能访问MP4文件,什么原因?
- Android板块没人了么? 难道我的这问题真没人能解决了?
- 如何在android应用层上,实现多个app之间共享主题、样式和图片等资源?
- Serial-Port-API相关 几个简单问题 求解答
支持楼主吧。代码仅供参考。不过肯定是能正常运行的。
手机端:package com.example.testandroidtcp;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.*;
import android.widget.*;
public class MainActivity extends Activity {
private TextView tv;
private Handler handler ;
private String ip;
private int port;
private boolean isFirst=true;
private Button send;
private TextView st;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main_activity);
handler=new Handler();
st=(TextView)this.findViewById(R.id.st_label);//放发送成功与否状态的。
send=(Button)this.findViewById(R.id.send);// 发送按钮
//通过网络发亲家文本数据的事件
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//网络操作必须要通过其它线程完成。不允许在GUI主线程做。否则操作自然失败。
Thread thread = new MyThread(MainActivity.this, handler);
thread.start();
}
});
}//onCreate
class MyThread extends Thread{
private MainActivity ctx;
Handler hd;
Socket s=null;
public MyThread(MainActivity ctx,Handler hd){
this.ctx = ctx;
this.hd=hd;
}
public void run(){
ctx.isFirst=false;
//获取输入的远方服务器的IP地址
ctx.ip=((EditText)(ctx.findViewById(R.id.et_ip))).getText().toString();
//获取输入的远方服务器的port
ctx.port=Integer.parseInt(
((EditText)(ctx.findViewById(R.id.et_port))).getText().toString()
);
//向远方发起TCP连接
try {
s=new Socket(ctx.ip,ctx.port);
//获取要发送的字符串
String data=((EditText)(ctx.findViewById(R.id.et_text))).getText().toString();
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
//将字符串按:UTF-8字节流方式传输。先传输长度,再传输字节内容。
dos.writeUTF(data);
dos.flush();
dos.close();
dos.close();
s.close();
hd.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ctx.st.setTextColor(Color.GREEN);
ctx.st.setText("发送成功!");
}
});
} catch (Exception e1){
// TODO Auto-generated catch block
//e1.printStackTrace();
final String errMsg=e1.getMessage();
hd.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ctx.st.setTextColor(Color.RED);
ctx.st.setText("发送成失败:"+errMsg);
}
});
}//try
}//run
}//MyThread
}//MainActivity
配置文件:注意要有网络权限。AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testandroidtcp"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.example.testandroidtcp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application></manifest>布局文件:main_activity.xml
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <TextView
android:id="@+id/ip_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="IP地址:"
android:textSize="24sp"
android:layout_marginBottom="20dp"/> <EditText
android:id="@+id/et_ip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:layout_marginBottom="20dp"
/> <TextView
android:id="@+id/port_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="端口号:"
android:textSize="24sp"
android:layout_marginBottom="20dp"
/> <EditText
android:id="@+id/et_port"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:layout_marginBottom="20dp"
/> <TextView
android:id="@+id/text_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切发送的文本:"
android:textSize="24sp"
android:layout_marginBottom="20dp"
/> <EditText
android:id="@+id/et_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:layout_marginBottom="20dp"
/>
<TextView
android:id="@+id/st_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="24sp"
android:layout_marginBottom="20dp"
android:textColor="#FFFF0000"
/>
<Button android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 发 送 "
android:layout_centerInParent="true"
/>
</LinearLayout>
TCP服务器代码:package njnu.java.tcpserver;import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleTCPServer {
static int port=9999;
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(port);
boolean again=true;
while(again){
System.out.println("TCP 服务器在"+port+"上等待连接...");
Socket s = ss.accept();
System.out.println("客户机IP:"+s.getInetAddress()+" 端口号: "+s.getPort()+" 已连接进来。");
DataInputStream dis=new DataInputStream(s.getInputStream());
//读取用户发送的数据
String data=dis.readUTF();
System.out.println("客户发送的数据是:"+data);
dis.close();
s.close();
}
}
}