`
yzhong_sa
  • 浏览: 89948 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

android与pc的故事

阅读更多





     别以为这里会有什么精彩的故事。。这是android和android的对话:
今天把之前做的聊天器移植到了android上来了,本来想启动两个两个sdk来搞搞,互相说说话。算了,一个都把我的机搞的有点慢了,然后开一个socekt的pc端的客户端来聊聊天吧。。

服务器的设计和之前的差不多,基本就是一个消息广播器,没有什么特别。

好,然后是android的socket客户端了:
源码:
package com.sun.chatdemo;
/**
* @author Sun.Zhong
* @version 1.0
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.sql.Date;
import java.sql.Timestamp;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
/**
*
* @param socket :Socket  object.
* @param br:socket message reader.
* @param messageContentText : all the message .
* @param inputMessage:message from android.
* @param nickNameText :nick name for android.
*
*/
public class ChatForm extends Activity implements Runnable {
/** Called when the activity is first created. */
private Socket socket;
private BufferedReader br;
private EditText messageContentText;
private EditText inputMessage;
private String data;
private PrintWriter out;
private EditText nickNameText;
//default constructor
public ChatForm() {
  
}
/**
  * override methord of Activity.
  * android's app starts with activity.
  */
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  /**
   * initial the default variable.
   */
  setContentView(R.layout.chatform);
  Log.e("test conntetion", "start activity");
  Button connectBtn = (Button) findViewById(R.id.connect);
  messageContentText = (EditText)findViewById(R.id.message_content);
  inputMessage = (EditText) findViewById(R.id.message_input);
  nickNameText = (EditText) findViewById(R.id.nick_name);
  Button sendBtn = (Button) findViewById(R.id.sendBtn);
  Button startServerBtn = (Button) findViewById(R.id.start_server);
  
  /**
   * set the listener of the connectBtn.
   * 1.connect with the server,and set the time before this conversation.
   * 2.get the input and out put stream of the socket.
   */
  connectBtn.setOnClickListener(new OnClickListener() {
  // messageContent = (EditText) findViewById(R.id.message_content)    
  public void onClick(View v) {
  
   Log.e("test connectBtn", "prepare to connect with the server..");
   try {
    socket = new Socket(InetAddress.getByName("192.168.0.166"), 5000);
    if(socket.isConnected()){
     //Log.e("time", new String().valueOf(System.currentTimeMillis()));
     messageContentText.setText(new Timestamp(System.currentTimeMillis()).toString()+"\n" );
    }
    br = new BufferedReader(new InputStreamReader(socket
      .getInputStream()));
    out = new  PrintWriter(socket.getOutputStream());
   } catch (UnknownHostException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   }
  });
  /**
   * set the listener of the sendBtn.
   * 1.get the nick name ,if it is null,set is as "android".
   * 2.send the message to the server.
   */
  sendBtn.setOnClickListener(new OnClickListener(){
   public void onClick(View v) {  
    if(out != null){
     String nickName = null;
     if(nickNameText.getText().toString().split(":").length == 2){
      nickName = nickNameText.getText().toString().split(":")[1];
     }else{
      nickName = "android";
     }
     Log.e("test conntetion", "test send data button");
     out.println(nickName+":"+inputMessage.getText().toString());
     out.flush();
    }
     inputMessage.setText("");
    
   }
  });
  /**
   * run the thread to access the handler to get data from server,and append it to the main frame.
   */
  Thread t = new Thread(this);
  t.start();
}
  public void run(){  
   while(true){
    try {
     if(br != null){  
     data = new String(br.readLine());
     Log.e("get message", data);
     messageHandler.sendEmptyMessage(0);
     }
    } catch (UnsupportedEncodingException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
/**
   * when messageHandler.sendEmptyMessage(0); runs,the handler will call the call
   * back fucntion handleMessage to append the data from the server.
   */
   private Handler messageHandler = new Handler() {
          @Override
          public void handleMessage(Message msg) {    
           messageContentText.append(data);
           messageContentText.append("\n");
          }
      };
}

嗯,坚持完善的英文注释!!!---这就是我的代码风格。
哦 忘记了 android客户端的界面:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<EditText
android:id="@+id/message_content"
android:layout_width="319px"
android:layout_height="268px"
android:textSize="18sp"
android:layout_x="0px"
android:layout_y="82px"
>
</EditText>
<EditText
android:id="@+id/message_input"
android:layout_width="233px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="10px"
android:layout_y="362px"
>
</EditText>
<Button
android:id="@+id/sendBtn"
android:layout_width="77px"
android:layout_height="wrap_content"
android:text="send"
android:layout_x="240px"
android:layout_y="362px"
>
</Button>

<Button
android:id="@+id/save_message"
android:layout_width="120px"
android:layout_height="40px"
android:text="save message"
android:layout_x="0px"
android:layout_y="40px"
>
</Button>

 

</AbsoluteLayout>


嗯。。。droiddraw-r1b8这个东东真的是个ui好帮手。。有它在可以拖拽控件了  真爽。。你也想要?   5块钱。。。

不说废话,睡觉!


继续,睡到9点半,整个脑都是离个聊天器的新需求:
加一个输入框,设置连接ip和nick name。。




然后当按下connect的时候要有一个进度条显示连接中:



最后就到达聊天框啦:



输入框都是一个activity,connect操作只是将ip同nick name这些参数传到下一个activity处理。socket的链接过程仍然放在ChatForm中进行连接。
嗯。。又一个阶段。。。

 

分享到:
评论

相关推荐

    Android与PC使用蓝牙通信

    本教程主要探讨的是如何利用Java在PC端建立一个服务端,并与Android设备进行蓝牙通信,实现多设备同时连接和数据传输的功能。 首先,我们需要理解蓝牙通信的基本原理。蓝牙是一种短距离无线通信技术,它允许设备...

    Android与PC聊天程序

    【Android与PC聊天程序】是一种实现跨平台通信的应用实例,主要涉及Android移动设备作为服务器端,个人计算机(PC)作为客户端进行数据交换的技术。在这个项目中,开发者利用Android的网络编程能力和TCP/IP协议来...

    android与PC通信

    本篇将详细探讨如何实现Android设备与个人计算机(PC)通过UDP(User Datagram Protocol,用户数据报协议)进行通信。 首先,我们要了解UDP是一种无连接的传输层协议,它不保证数据的顺序、可靠性和完整性,但具有...

    android与Pc实时通信

    在IT行业中,实时通信(Real-Time Communication,RTC)是一个关键领域,特别是在移动设备如Android与个人计算机(PC)之间。这种通信技术允许设备之间快速、高效地交换数据,无论是文本消息、语音通话还是视频会议...

    Android通过USB与PC端双向通信【支持字符、文件】

    在Android开发中,有时我们需要实现设备与PC之间的通信,例如进行数据传输或者调试。本教程将探讨如何在Android设备上通过USB接口与PC进行双向通信,支持字符和文件的交互。这种通信方式常用于设备控制、数据同步...

    android手机通过usb线与PC连接通信代码

    在Android开发中,将手机与PC通过USB进行通信是一种常见的需求,这主要涉及到Android的USB主机模式(Host Mode)和设备模式(Device Mode)。本文将详细介绍如何实现Android手机通过USB线与PC进行通信的代码实践。 ...

    android app与pc通信,USB连接socket通信,

    在IT行业中,Android App与PC通信是一个常见的需求,特别是在特定环境下如无WiFi网络或需要高度安全性的场景。本文将深入探讨如何通过USB连接实现Android应用与个人计算机(PC)之间的Socket通信。 首先,理解...

    android监控pc应用_android端

    1. **网络编程**:Android应用需要与PC建立连接,这需要理解TCP/IP协议栈,以及如何在Android平台上创建套接字连接。 2. **数据传输协议**:实时屏幕共享可能使用H.264等视频编码标准,将PC屏幕的变化转化为数据流...

    android+pc socket通信

    "Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...

    Android与PC端通信简单Demo

    这个"Android与PC端通信简单Demo"就是一个很好的示例,它利用了HTTPClient库来实现客户端(Android)与服务器端(Java PC)的数据交互。下面将详细解释这个Demo中涉及的知识点。 1. **HTTP通信协议**: HTTP(超...

    android手机与PC视频互通源码

    【Android手机与PC视频互通源码详解】 在移动设备与个人电脑(PC)之间的互联互通已经成为现代数字生活的重要一环,特别是在视频通信领域。这个“android手机与PC视频互通源码”提供了一个很好的学习平台,让...

    PC控制android设备

    1. **USB连接**:通过USB数据线将Android设备与PC相连,可以启用USB调试模式,借助如“adb”(Android Debug Bridge)工具进行控制。ADB是Android开发者工具的一部分,它允许开发者进行设备调试、安装应用、运行命令行...

    Android手机通过usb与PC通讯

    Android手机通过usb连接手机后,通过adb进行端口映射,然后使用socket通讯,包含。本资源包含pcclient和phoneserver端。如果运行不起来,注意adb的使用,安卓开发者都懂的。

    PC 通过USB 与android APP 通信

    为了启用PC与APP的USB通信,用户需要在Android设备上开启USB调试模式,这是在开发者选项中设置的。 接下来,我们来到APP编程层面。在Android应用中,可以使用多种方法与PC通信。一种常见的方式是通过Socket通信。...

    基于Socket的Android与PC简单聊天应用的实现

    本项目源码是基于Socket的Android与PC聊天的实现,包含android源代码和一个exe和WinForm应用,测试了一下完美通信,本项目是学习PC客户端与Android服务端的Socket同步通信的很好的案例。

    Android+PC语音对讲 Android IM

    主要功能: 连接服务器,并开启一个监听来信的线程,如果有来信,...使用android 系统自带的mediaPlayer 实现声音播放功能; 第一步: 连接服务器 第二步:监听接收线程 接收文件线程类: 发送文件线程类:

    PC客户端与Android服务端的Socket同步通信.docx

    ### PC客户端与Android服务端的Socket同步通信 #### 概述 在现代移动应用开发中,经常需要实现PC客户端与Android设备之间的数据交互。本文档将详细介绍如何通过Socket同步通信技术,实现PC客户端与Android服务端的...

    Android与PC通信

    发现网上的很多例子都不能正常运行,本人经过2天的努力,终于让Android与PC Web能通信了。服务端用Cxf建立WebService,android客户端用ksoap2-android与服务端的webservice取得通信。本项目所有的jar包都已经打包,...

    android 程序与PC通行

    在Android编程领域,实现手机与PC之间的通信是一个常见的需求,特别是在物联网(IoT)和远程控制应用中。本文将深入探讨如何使用Socket编程技术来构建一个Android程序,使其能够与PC进行数据交换。我们将主要关注标题...

Global site tag (gtag.js) - Google Analytics