别以为这里会有什么精彩的故事。。这是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中进行连接。
嗯。。又一个阶段。。。
分享到:
相关推荐
本教程主要探讨的是如何利用Java在PC端建立一个服务端,并与Android设备进行蓝牙通信,实现多设备同时连接和数据传输的功能。 首先,我们需要理解蓝牙通信的基本原理。蓝牙是一种短距离无线通信技术,它允许设备...
【Android与PC聊天程序】是一种实现跨平台通信的应用实例,主要涉及Android移动设备作为服务器端,个人计算机(PC)作为客户端进行数据交换的技术。在这个项目中,开发者利用Android的网络编程能力和TCP/IP协议来...
本篇将详细探讨如何实现Android设备与个人计算机(PC)通过UDP(User Datagram Protocol,用户数据报协议)进行通信。 首先,我们要了解UDP是一种无连接的传输层协议,它不保证数据的顺序、可靠性和完整性,但具有...
在IT行业中,实时通信(Real-Time Communication,RTC)是一个关键领域,特别是在移动设备如Android与个人计算机(PC)之间。这种通信技术允许设备之间快速、高效地交换数据,无论是文本消息、语音通话还是视频会议...
在Android开发中,有时我们需要实现设备与PC之间的通信,例如进行数据传输或者调试。本教程将探讨如何在Android设备上通过USB接口与PC进行双向通信,支持字符和文件的交互。这种通信方式常用于设备控制、数据同步...
在Android开发中,将手机与PC通过USB进行通信是一种常见的需求,这主要涉及到Android的USB主机模式(Host Mode)和设备模式(Device Mode)。本文将详细介绍如何实现Android手机通过USB线与PC进行通信的代码实践。 ...
在IT行业中,Android App与PC通信是一个常见的需求,特别是在特定环境下如无WiFi网络或需要高度安全性的场景。本文将深入探讨如何通过USB连接实现Android应用与个人计算机(PC)之间的Socket通信。 首先,理解...
1. **网络编程**:Android应用需要与PC建立连接,这需要理解TCP/IP协议栈,以及如何在Android平台上创建套接字连接。 2. **数据传输协议**:实时屏幕共享可能使用H.264等视频编码标准,将PC屏幕的变化转化为数据流...
"Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...
这个"Android与PC端通信简单Demo"就是一个很好的示例,它利用了HTTPClient库来实现客户端(Android)与服务器端(Java PC)的数据交互。下面将详细解释这个Demo中涉及的知识点。 1. **HTTP通信协议**: HTTP(超...
【Android手机与PC视频互通源码详解】 在移动设备与个人电脑(PC)之间的互联互通已经成为现代数字生活的重要一环,特别是在视频通信领域。这个“android手机与PC视频互通源码”提供了一个很好的学习平台,让...
1. **USB连接**:通过USB数据线将Android设备与PC相连,可以启用USB调试模式,借助如“adb”(Android Debug Bridge)工具进行控制。ADB是Android开发者工具的一部分,它允许开发者进行设备调试、安装应用、运行命令行...
Android手机通过usb连接手机后,通过adb进行端口映射,然后使用socket通讯,包含。本资源包含pcclient和phoneserver端。如果运行不起来,注意adb的使用,安卓开发者都懂的。
为了启用PC与APP的USB通信,用户需要在Android设备上开启USB调试模式,这是在开发者选项中设置的。 接下来,我们来到APP编程层面。在Android应用中,可以使用多种方法与PC通信。一种常见的方式是通过Socket通信。...
本项目源码是基于Socket的Android与PC聊天的实现,包含android源代码和一个exe和WinForm应用,测试了一下完美通信,本项目是学习PC客户端与Android服务端的Socket同步通信的很好的案例。
主要功能: 连接服务器,并开启一个监听来信的线程,如果有来信,...使用android 系统自带的mediaPlayer 实现声音播放功能; 第一步: 连接服务器 第二步:监听接收线程 接收文件线程类: 发送文件线程类:
### PC客户端与Android服务端的Socket同步通信 #### 概述 在现代移动应用开发中,经常需要实现PC客户端与Android设备之间的数据交互。本文档将详细介绍如何通过Socket同步通信技术,实现PC客户端与Android服务端的...
发现网上的很多例子都不能正常运行,本人经过2天的努力,终于让Android与PC Web能通信了。服务端用Cxf建立WebService,android客户端用ksoap2-android与服务端的webservice取得通信。本项目所有的jar包都已经打包,...
在Android编程领域,实现手机与PC之间的通信是一个常见的需求,特别是在物联网(IoT)和远程控制应用中。本文将深入探讨如何使用Socket编程技术来构建一个Android程序,使其能够与PC进行数据交换。我们将主要关注标题...