Java Android tcp服务器通过按钮向客户端发送消息
如何使用按钮将数据(字符串)服务器发送到客户端? 我做了几次尝试,但我对android编程还不熟悉。因此 等待您的帮助..我的期望:只是一个小样本。。 我的目标是将数据从服务器发送到客户端Java Android tcp服务器通过按钮向客户端发送消息,java,android,sockets,tcp,Java,Android,Sockets,Tcp,如何使用按钮将数据(字符串)服务器发送到客户端? 我做了几次尝试,但我对android编程还不熟悉。因此 等待您的帮助..我的期望:只是一个小样本。。 我的目标是将数据从服务器发送到客户端 enter code here public class MainActivity extends ActionBarActivity { private TextView tvClientMsg,tvServerIP,tvServerPort; private final int SERVER_PORT
enter code here public class MainActivity extends ActionBarActivity {
private TextView tvClientMsg,tvServerIP,tvServerPort;
private final int SERVER_PORT = 13003; //Define the server port
@Override
protected void onCreate(Bundle saveenter code heredInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvClientMsg = (TextView) findViewById(R.id.textViewClientMessage);
tvServerIP = (TextView) findViewById(R.id.textViewServerIP);
tvServerPort = (TextView) findViewById(R.id.textViewServerPort);
tvServerPort.setText(Integer.toString(SERVER_PORT));
getDeviceIpAddress();
new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket socServer = new ServerSocket(SERVER_PORT);
Socket socClient = null;
while (true) {
socClient = socServer.accept();
ServerAsyncTask serverAsyncTask = new ServerAsyncTask();
serverAsyncTask.execute(new Socket[] {socClient});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
public void getDeviceIpAddress() {
try {
for (Enumeration<NetworkInterface> enumeration = NetworkInterface
.getNetworkInterfaces(); enumeration.hasMoreElements();) {
NetworkInterface networkInterface = enumeration.nextElement();
for (Enumeration<InetAddress> enumerationIpAddr = networkInterface.getInetAddresses(); enumerationIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumerationIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress.getAddress().length == 4) {
tvServerIP.setText(inetAddress.getHostAddress());
}
}
}
} catch (SocketException e) {
Log.e("ERROR:", e.toString());
}
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class ServerAsyncTask extends AsyncTask<Socket, Void, String> {
protected String doInBackground(Socket... params) {
String result = null;
Socket mySocket = params[0];
try {
InputStream is = mySocket.getInputStream();
PrintWriter out = new PrintWriter(
mySocket.getOutputStream(), true);
out.println("Hello from server");
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
result = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
protected void onPostExecute(String s) {
tvClientMsg.setText(s);
}
}
}
在此处输入代码公共类MainActivity扩展ActionBarActivity{
私有文本视图tvClientMsg、tvServerIP、tvServerPort;
private final int SERVER_PORT=13003;//定义服务器端口
@凌驾
创建时受保护的void(Bundle saveenter code heredInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvClientMsg=(TextView)findViewById(R.id.textViewClientMessage);
tvServerIP=(TextView)findViewById(R.id.textViewServerIP);
tvServerPort=(TextView)findViewById(R.id.textViewServerPort);
tvServerPort.setText(Integer.toString(SERVER_PORT));
getDeviceIpAddress();
新线程(newrunnable()){
@凌驾
公开募捐{
试一试{
ServerSocket socServer=新的ServerSocket(服务器端口);
套接字socClient=null;
while(true){
socClient=socServer.accept();
ServerAsyncTask ServerAsyncTask=新的ServerAsyncTask();
执行(新套接字[]{socClient});
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
}).start();
}
public void getDevicePaddress(){
试一试{
对于(枚举=网络接口)
.getNetworkInterfaces();枚举.hasMoreElements();){
NetworkInterface NetworkInterface=enumeration.nextElement();
对于(枚举enumerationIpAddr=networkInterface.getInetAddresses();枚举Ipaddr.hasMoreElements();){
InetAddress InetAddress=enumerationIpAddr.nextElement();
如果(!inetAddress.isLoopbackAddress()&&inetAddress.getAddress().length==4){
tvServerIP.setText(inetAddress.getHostAddress());
}
}
}
}捕获(SocketException e){
Log.e(“错误:,e.toString());
}
}
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
类ServerAsyncTask扩展了AsyncTask{
受保护字符串DOIN背景(插座…参数){
字符串结果=null;
套接字mySocket=params[0];
试一试{
InputStream=mySocket.getInputStream();
PrintWriter out=新的PrintWriter(
mySocket.getOutputStream(),true);
println(“来自服务器的你好”);
BufferedReader br=新的BufferedReader(
新的InputStreamReader(is));
结果=br.readLine();
}捕获(IOE异常){
e、 printStackTrace();
}
返回结果;
}
受保护的void onPostExecute(字符串s){
tvClientMsg.setText;
}
}
}
除了在线程中启动异步任务外,代码看起来还不错。所以请告诉我哪里出了问题。什么不起作用?代码流走了多远?客户端是否连接?您应该添加一些Log.d()语句来遵循流程。此外:你的客户告诉你什么?它连接吗?它期望什么是变灰消息?