您的位置:首页 > 理论基础 > 计算机网络

12、android socket使用demo:网络聊天

2015-02-11 19:32 274 查看
目录:

一、效果图

二、原代码分享

三、代码分析

四、总结

[b]一、效果图如下[/b]:

客户端1:                            客户端2:   

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText
android:id="@+id/editText_ip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/TextView_ip_tips"
android:layout_marginRight="15dp"
android:text="192.168.1.232"
android:ems="10"/>

<TextView
android:id="@+id/TextView_ip_tips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginTop="16dp"
android:text="接受IP:" />

<EditText
android:id="@+id/EditText_port"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/textView_port_tips"
android:layout_below="@+id/editText_ip"
android:layout_marginTop="16dp"
android:ems="10"
android:text="8888"
android:inputType="number" >

<requestFocus />
</EditText>

<TextView
android:id="@+id/textView_port_tips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/EditText_port"
android:layout_alignParentLeft="true"
android:text="输入端口号:" />

<TextView
android:id="@+id/textView_history_content"
android:layout_width="match_parent"
android:layout_height="350dp"
android:layout_below="@+id/checkBox_server_start" />

<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/EditText_content"
android:layout_alignParentBottom="true"
android:text="发送" />

<EditText
android:id="@+id/EditText_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:ems="10" />

<CheckBox
android:id="@+id/checkBox_server_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/EditText_port"
android:layout_marginLeft="24dp"
android:checked="false"
android:text="开启发送模式" />

</RelativeLayout>


View Code

[b]三、代码分析[/b]

流程分析:

1、服务端

程序开启的时候,执行serverStart()方法,将自身做为serverSocket,端口号为8888,做为socket的服务器跑起来;

在循环中,通过带有阻塞特性的accept函数等待连接,如果有连接,通过accept函数得到套接字s,然后通过s的getInputStream()方法得到输入流(也就是对方发送的内容),同事也从s的getInetAddress方法得到对方的ip地址;这样一来就读到了两个重要信息 ① ip地址 ②发送过来的内容

2、客户端

在通过设置edittext内容,配置得到对方的IP地址和端口号,如果选中"开启发送模式",然后创建套件字s,通过套接字的getOutputStream()方法得到可写流out;

“发送”按钮的回调函数是用来通过可写流-写入-套接字(写入内容为用户输入的文本)

这样一来,程序基本ok了,然后运行在两部手机上,即可实现基于socket的网络聊天。

[b]四、总结[/b]

参考连接:

1、 http://mobile.51cto.com/android-386691.htm

2、/article/1358117.html

3、/article/5719725.html

socket简单通信的几个关键点:

1、如果要实现接受消息功能,需要本身做为服务端跑起来,同时得到可读流。关键点:serverSocket、getIputStream

2、如果要实现消息发送功能,需要本身创建套接字,并得到可写流,同时设置要发送到的ip和端口号。关键点:socket、getOutputStream、对方IP、对方Port

That's All

没找到在随笔里如何添加附件,工程附件大家去网盘下载去吧。http://pan.baidu.com/s/1o6vA8sU
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: