一对一Socket简单聊天的实现
今天终于调试通了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简单聊天的实现的更多相关文章
- Python Socket 简单聊天室2
上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Python Socket 简单聊天室1
这是第一版,最简单的,仅仅实现了通信,你收我发,我收你发而已.下篇将介绍,基于异步多线程的聊天室: 客户端: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- Socket.IO聊天室~简单实用
小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...
- 利用socket.io+nodejs打造简单聊天室
代码地址如下:http://www.demodashi.com/demo/11579.html 界面展示: 首先展示demo的结果界面,只是简单消息的发送和接收,包括发送文字和发送图片. ws说明: ...
- Android 基于Socket的聊天应用(二)
很久没写BLOG了,之前在写Android聊天室的时候答应过要写一个客户(好友)之间的聊天demo,Android 基于Socket的聊天室已经实现了通过Socket广播形式的通信功能. 以下是我写的 ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...
- 【WebSocket No.2】WebSocket和Socket实现聊天群发
介绍: 前面写过一篇简单的websocke实现服务端.这一篇就不在说什么基础的东西主要是来用实例说话,主要是讲一下实现单聊和群组聊天和所有群发的思路设计. 直接不懂的可以看一下上一篇简单版本再来看也行 ...
- socket实现聊天功能(二)
socket实现聊天功能(二) WebSocket协议是建立在HTTP协议之上,因此创建websocket服务时需要调用http模块的createServer方法.将生成的server作为参数传入so ...
随机推荐
- Tensflow预测股票实例
import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf #———— ...
- Write Markdown Syntax Online Document with Sphinx and Pandoc
There is no doubt that we have to write doc while we are developing software. But How do you write d ...
- webservice之helloword(web)rs
spring整合webservice 1.pom.xml文件 <dependencies> <!-- cxf 进行rs开发 必须导入 --> <dependency> ...
- pycharm的注册码,所有版本
77751S0VBA-eyJsaWNlbnNlSWQiOiI3Nzc1MVMwVkJBIiwibGljZW5zZWVOYW1lIjoi5b285bK4IHNvZnR3YXJlMiIsImFzc2lnb ...
- kosaraju算法
这个是求一个图有几个强联通分量的算法 先讲一下应该流程 首先输入一个图G,创建一个反向的图GT 图G 对图进行dfs遍历,纪录每个点结束搜索的时间p[i] p[1]=2 p[2]=1 p[3]=5 ...
- hdu 5054
http://acm.hdu.edu.cn/showproblem.php?pid=5054 确定是否矩形中点 这都能hack成功,无语 #include <cstdio> #includ ...
- ThreadLocal实现线程级上下文
一.ThreadLocal测试 package com.junge.threadlocal.context; /** * @author Administrator * */ public class ...
- Android-----application的学习
一.Application的对象回调函数 1.onCreate : Application对象被创建时候会调用 2.onConfigurationChanged : 屏幕方向变化.系统语言的更改等 3 ...
- Code Chef MINPOLY(计算几何+dp)
题面 传送门 题解 我们枚举这个凸多边形\(y\)坐标最小的点\(p_i\),然后对于所有\(y\)坐标大于等于它的点极角排序 我们预处理出\(s_{j,k}\)表示三角形\(p_i,p_j,p_k\ ...
- 05_python_字典
一.字典定义 字典是python中唯一的映射类型,以{ }括起来的键值对组成,在dict中key是唯一的.在保存时,根据key来计算一个内存地址,然后把key-value保存至地址中.这种算法是has ...