前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下

首先是服务端代码:

 package com.jiao.socketdemo;

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; public class ChatServer extends Thread {
private ServerSocket server = null;
private static final int PORT = 5550;
private BufferedWriter writer;
private BufferedReader reader; public ChatServer() throws IOException { CreateSocket();//初始化socket
} @Override
public void run() { Socket client;
String txt; try {
while (true) {
// 获取应答消息
client = ResponseSocket();
while (true) {
// 接受客户端信息
txt = ReceiveMsg(client); System.out.println("客户端发来的消息:" + txt); SendMsg(client, txt); if (true)
break;
}
CloseSocket(client);
}
} catch (Exception e) {
// TODO: handle exception
} } //关闭连接
private void CloseSocket(Socket client) throws IOException {
reader.close();
writer.close();
client.close(); } //封装发送消息的方法
private void SendMsg(Socket socket, String Msg) throws IOException {
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(Msg + "\n");
writer.flush();
} //封装接受消息的方法
private String ReceiveMsg(Socket socket) throws IOException {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String txt = reader.readLine();
return txt;
} //接受消息
private Socket ResponseSocket() throws IOException {
Socket client = server.accept();
return client;
} //初始化socket
private void CreateSocket() throws IOException {
server = new ServerSocket(PORT, 100);
} }

启动服务端的代码如下:

 // 创建聊天服务器
ChatServer chatserver = new ChatServer();
// 检测服务器是否已经启动,如果没有则启动服务器
if (chatserver != null) {
chatserver.start();
}

以下是客户端的代码:

 package com.example.socketclient;

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity {
public static int SERVER_PORT = 5550; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread() {
public void run() {
message();
}
}.start();
} private void message() {
try {
Socket client = RequestSocket("这里是服务器的IP", SERVER_PORT);
SendMsg(client, "client send");
String txt = ReceiveMsg(client);
System.out.println("服务端返回数据:" + txt);
} catch (Exception e) { }
}; // 客户端获取消息类
private Socket RequestSocket(String host, int port)throws UnknownHostException, IOException {
Socket socket = new Socket(host, port);
return socket;
} // 客户端发送消息类
private void SendMsg(Socket socket, String msg) throws IOException {
// 将要发送的消息写入Buffer 中
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 格式转换
writer.write(msg.replace("\n", " ") + "\n");
// 刷新,发送
writer.flush();
} // 客户端接收消息
private String ReceiveMsg(Socket socket) throws IOException {
// 写入读Buffer 中// 获取接收的消息到数据流中
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 读取消息到字符串中
String Msg = reader.readLine();
// 以字符串的方式返回消息
return Msg;
} }

最新文章

  1. Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
  2. SVN——配置和安装
  3. ORACLE 建库过程总结
  4. Codeforces Gym 100015B Ball Painting 找规律
  5. 使用kdbg或nemiver调试ROS
  6. iOS Safari 中点击事件失效的解决办法
  7. max Sum(简单动态规划)
  8. win8.1 64位环境建设android开发环境
  9. xcode8 更新cocoapods
  10. Apache Flink 分布式执行
  11. Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章
  12. Codeforces Round #545 (Div. 2)-Camp Schedule
  13. flutter获取状态栏高度
  14. [Kubernetes]容器日志的收集与管理
  15. oracle sql小结(主要讲横列转换的例子)group by以及wmsys.wm_concat()的使用
  16. PLSQL 问题小记
  17. Docker 使用Dockerfile构建redis镜像
  18. 2016 多校联赛7 Balls and Boxes(概率期望)
  19. ChannelInitializer: 每个channel都new ChannelHandle
  20. Flask的WTforms

热门文章

  1. C++的Trigraph
  2. Android获取屏幕长宽
  3. 【转载】Linux下动态共享库加载时的搜索路径详解
  4. js-数据类型
  5. mysql 随机字符的产生方法
  6. C#函数式程序设计之用闭包封装数据
  7. 解决PL/SQL查询结果乱码的问题
  8. 从零开始学习Linux(ls命令)
  9. 后缀数组---New Distinct Substrings
  10. 泛函编程(14)-try to map them all