今天终于调试通了Socket一对一的聊天,每次发送连接请求后,将用户名发送到Socket中去,然后将用户名和新建的socket存到map中,然后根据用户名来确定接收方是谁,以实现一对一的聊天功能。

  上图是我看博客的时候截下来的图,这就是大概思路了。具体今天的实现,我写了一个界面,上边有服务器ip地址,用来连接服务器。

  以及发送方,接收方,消息内容。发送的时候,将这三条数据连接起来,末尾加"\n",以便readLine()函数读取内容。然后发送消息。三个按钮的单击事件如下所示,界面在后边会贴出来。

     //*****************************主要工作********************************
Socket socket = null;
BufferedReader br = null;
BufferedWriter bw = null;
protected void connect() { AsyncTask<Void, String, Void> reader = new AsyncTask<Void, String, Void>(){ @Override
protected Void doInBackground(Void... arg0) {
try {
socket = new Socket(editIp.getText().toString(), 12345);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
publishProgress("@success");
} catch (UnknownHostException e1) {
Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show();
} catch (IOException e1) {
Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show();
}
try {
String line = "";
while((line = br.readLine()) != null){
publishProgress(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} @Override
protected void onProgressUpdate(String... values) {
// TODO Auto-generated method stub
if (values[0].equals("@success")) {
Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show();
}
tvNeirong.append("对方说:"+values[0]+"\n");
super.onProgressUpdate(values);
}
};
reader.execute(); }
protected void login() {
// TODO Auto-generated method stub
try {
bw.write(editUsername.getText().toString()+"\n");
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
protected void send() {
// TODO Auto-generated method stub
try {
tvNeirong.append("我说:"+editContent.getText().toString()+"\n");
//将消息内容连接为一个字符串,格式为FromID \n Content \n ToID \n
//因为将来读取时候用的是readLine()函数,所以必须加\n
String str = editUsername.getText().toString()+"\n"
+editContent.getText().toString()+"\n"
+editToID.getText().toString()+"\n";
bw.write(str);
bw.flush();
editContent.setText("");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

  然后我开了三个安卓模拟器,两个Eclipse,电脑内存飙到了百分之八十多,测试完成后赶紧关了,一顿卡,大概如下所示,三个用户为10001,10002,10003,我让10001->10002,10002->10003,10003->10001,这样互相发送消息,实现的效果如下图所示:

  然后贴出我的ServerSocket中的logcat内容,这些消息是封装成了Json字符串来发送的。

  

  消息的格式为FromID+"\n"+Content+"\n"+ToID+"\n",这样就组成了一个完整的字符串,readLine()函数遇到"\n"就会停止,每次将对应的变量解析出来,然后服务端再去发送消息就可以了。

  好了,有什么问题还会来这里补充,(仅供自己学习参考0.0)

一对一Socket简单聊天的实现的更多相关文章

  1. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  2. Python Socket 简单聊天室1

    这是第一版,最简单的,仅仅实现了通信,你收我发,我收你发而已.下篇将介绍,基于异步多线程的聊天室: 客户端: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  3. Socket.IO聊天室~简单实用

    小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...

  4. 利用socket.io+nodejs打造简单聊天室

    代码地址如下:http://www.demodashi.com/demo/11579.html 界面展示: 首先展示demo的结果界面,只是简单消息的发送和接收,包括发送文字和发送图片. ws说明: ...

  5. Android 基于Socket的聊天应用(二)

    很久没写BLOG了,之前在写Android聊天室的时候答应过要写一个客户(好友)之间的聊天demo,Android 基于Socket的聊天室已经实现了通过Socket广播形式的通信功能. 以下是我写的 ...

  6. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  7. Java Socket聊天室编程(一)之利用socket实现聊天之消息推送

    这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...

  8. 【WebSocket No.2】WebSocket和Socket实现聊天群发

    介绍: 前面写过一篇简单的websocke实现服务端.这一篇就不在说什么基础的东西主要是来用实例说话,主要是讲一下实现单聊和群组聊天和所有群发的思路设计. 直接不懂的可以看一下上一篇简单版本再来看也行 ...

  9. socket实现聊天功能(二)

    socket实现聊天功能(二) WebSocket协议是建立在HTTP协议之上,因此创建websocket服务时需要调用http模块的createServer方法.将生成的server作为参数传入so ...

随机推荐

  1. i2c_client 几种实例化方法

    http://blog.csdn.net/lugandong/article/details/48092397

  2. idea配置github

    一.事先准备 1.安装Git Git下载: http://git-scm.com/downloads 最新版本是2.1.2 git登陆地址:https://github.com/ 2.注册GitHub ...

  3. 在aliyun遇到一些问题

    1. 删除现有网站报错:“applicationhost.config 错误 无法写入配置文件” 解决办法:用管理员身份打开IIS. 2. IIS上部署MVC网站,打开后500错误:处理程序“Exte ...

  4. c51较c比较,单片机最小系统

    sfr(Special function registers):特殊功能寄存器声明 bit:位变量声明 sbit:特殊位声明 psw^2,表示psw寄存器上的第2位 << >> ...

  5. gcc和vs在c的一些区别

    1.switch中每个标签后面的命令在gcc中需要{}括起来以指明作用域. 2._itoa是非标准的c和c++扩展函数,在linux下可以使用sprintf(string,   "%d &q ...

  6. 在linux上搭建nexus私服(CentOS7)

    1.下载nexus安装包,下载地址 https://www.sonatype.com/download-oss-sonatype?hsCtaTracking=920dd7b5-7ef3-47fe-96 ...

  7. 【xcode中添加pch全局引用文件】

    前沿:xcode6中去掉了pch,为了一些琐碎的头文件引用,加快了 编译速度! xcode6之前的版本建项目就自动添加了是这样的: xcode6后的版本要自己手动的添加步骤如下: 1)  2) 3)  ...

  8. HMAILSERVER集成WEB邮件系统(ROUNDCUBE WEBMAIL)

    hMailServer集成web邮件系统(Roundcube Webmail) 文/玄魂 前言 在上篇文章(使用hMailServer搭建邮件服务器)中,介绍了hMailServer的安装和简单配置. ...

  9. Asp .Net core 2 学习笔记(3) —— 静态文件

    这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源: ASP.NET Core 中文文档目录 官方文档 记在这里的东西我会不断的完善丰满,对于文章 ...

  10. C#Winfrom数据库读取日期(年月日格式转换)

    显示类型:2018-6-1 //说明:data_time.Text 控件名文本值 :dataset.Tables[0].Rows[0]["art_time"]  数据集.表名.[行 ...