id="@+id/content"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"/>
android:
text="你好:
"
android:
orientation="horizontal"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content">
id="@+id/send"
android:
layout_width="90dip"
android:
layout_height="wrap_content"
android:
text="发送"/>
id="@+id/clear"
android:
layout_width="140dip"
android:
layout_height="wrap_content"
android:
text="清空聊天记录"/>
id="@+id/author"
android:
layout_width="90dip"
android:
layout_height="wrap_content"
android:
text="签名"/>
附:
Socket连接的关键代码
(1)服务器端关键代码:
1)//建立Socket服务
ServerSocketserver=newServerSocket(18888);
2)//接收请求
socket=server.accept();
3)//接收客户端消息
BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
Stringmessage=in.readLine();
4)//发送消息,向客户端
PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
out.println("Server:
"+message);
5)//关闭流
in.close();
out.close();
(2)Android客户端关键代码:
Socketsocket=null;
Stringmessage=editText.getText().toString()+"\r\n";
socket=newSocket("10.0.2.2",18888);
PrintWriterout=
newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
//发送数据
out.println(message);
//接收数据
BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
Stringmsg=in.readLine();
editText.setText(msg);
//关闭流
out.close();
in.close();
四、实验用的仪器和材料:
1.PC机;
2.Widows操作系统
3.AdroidSDK,ADT,Eclipse开发环境
4.Network
5.Androidmobile
五、实验的步骤和方法(程序代码及、注释、说明):
1.
服务器端代码:
package;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
import.ServerSocket;
import.Socket;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
/**
*Android简易聊天室(服务器端)
*
*@infoMyEclipse右键运行
*@info命令行cd到文件路径(如:
E:
\Android\client2_13\bin\),执行java.Server
*@authormao2012-6-20上午10:
40:
19
*/
publicclassServer{
/*端口5000*/
privatestaticfinalintSERVERPORT=5000;
/*所有已连接的客户端*/
privatestaticListclientList=newArrayList();
/**线程缓存池*/
privateExecutorServiceexecutorService;
/**服务器套接字*/
privateServerSocketserverSocket;
/**main函数*/
publicstaticvoidmain(String[]args){
newServer();
}
publicServer(){
try{
serverSocket=newServerSocket(SERVERPORT);
executorService=Executors.newCachedThreadPool();
System.out.println("服务器已启动...");
Socketclient=null;
while(true){
//等待客户消息
client=serverSocket.accept();
//保存每次的客户套接字
clientList.add(client);
//启动一个线程去处理客户消息
executorService.execute(newThreadServer(client));
}
}catch(IOExceptione){
System.out.println("套接字异常!
");
e.printStackTrace();
}
}
/**消息处理线程*/
staticclassThreadServerimplementsRunnable{
privateSocketsocket;
privateBufferedReaderbr;
privatePrintWriterpw;
privateStringmsg;
publicThreadServer(Socketsocket)throwsIOException{
this.socket=socket;
//初始化输入流,采用UTF-8字符集
br=newBufferedReader(newInputStreamReader(
socket.getInputStream(),"UTF-8"));
msg="用户:
"+this.socket.getInetAddress()+"来啦~请求次数:
"
+clientList.size();
sendMessage();
}
/*线程运行方法*/
publicvoidrun(){
try{
while((msg=br.readLine())!
=null){
if(msg.trim().equals("exit")){//退出
clientList.remove(socket);
br.close();
pw.close();
msg="用户:
"+this.socket.getInetAddress()
+"退出.请求次数:
"+clientList.size();
socket.close();
sendMessage();
break;
}elseif(msg.trim().equals("clear")){//清空聊天记录
msg=socket.getInetAddress()+":
";
sendMessage();
}elseif(!
"".equals(msg.trim())){//普通聊天消息
msg=socket.getInetAddress()+":
"+msg;
sendMessage();
}
}
}catch(IOExceptione){
e.printStackTrace();
}
}
/**向客户端回送消息*/
privatevoidsendMessage()throwsIOException{
System.out.println(msg);
for(Socketclient:
clientList){
pw=newPrintWriter(client.getOutputStream(),true);
pw.println(msg);
}
}
}
}
2.
Android客户端;
布局文件
xmlversion="1.0"encoding="utf-8"?
>
android="
android:
layout_width="fill_parent"
android:
layout_height="fill_parent"
android:
orientation="vertical">