Android Socket编程基于TCP实现客户端与服务器简易通信
2018-03-20 15:57
1166 查看
定义:
套接字,是一个对TCP/IP进行封装的API接口,不是网络协议。分类:
流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket(SOCK_DGRAM)。数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
基于TCP的流式Socket连接实现
Android客户端实现:public class SocketDeme extends AppCompatActivity implements View.OnClickListener { private Socket socket; private EditText et_content; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_socket); findViewById(R.id.btn_conn).setOnClickListener(this); findViewById(R.id.btn_send).setOnClickListener(this); findViewById(R.id.btn_close).setOnClickListener(this); et_content = (EditText) findViewById(R.id.et_content); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_conn: conn(); break; case R.id.btn_send: String msg = et_content.getText().toString().trim(); if (!TextUtils.isEmpty(msg)) send(msg); break; case R.id.btn_close: if (socket.isConnected()){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } break; } } /** * 建立Socket连接 */ public void conn() { new Thread() { @Override public void run() { try { socket = new Socket("10.20.11.225", 9999); Log.e("tag", "建立连接"); InputStream is = socket.getInputStream(); DataInputStream reader = new DataInputStream(is); String msg_service = reader.readUTF(); Log.e("tag","服务端消息: "+msg_service); } catch (IOException e) { e.printStackTrace(); } } }.start(); } /** * 发送消息 * @param msg */ public void send(final String msg) { new Thread() { @Override public void run() { try { DataOutputStream writer = new DataOutputStream(socket.getOutputStream()); writer.writeUTF(msg); Log.e("tag","我的消息:"+msg); } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
服务端实现:
public class SocketServer { public static void main(String[] args){ startService(); } /** * 启动服务监听,等待客户端连接 */ private static void startService(){ try { //创建ServerSocket ServerSocket serverSocket = new ServerSocket(9999); System.out.println("--开启服务器,监听端口 9999 --"); //监听端口,等待客户链接 while(true){ System.out.println("--等待客户端连接--"); Socket socket = serverSocket.accept();//等待客户端连接 System.out.println("得到客户端连接:"+socket); startReader(socket); getConsoleMsg(socket); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 获得控制台输入内容 * @return */ private static String getConsoleMsg(final Socket scoket){ String msg = ""; Scanner scan = new Scanner(System.in); msg = scan.nextLine(); System.out.println("我的信息:"+msg); sendServiceMsg(scoket,msg); return msg; } /** * 服务器发送消息 * @param scoket */ private static void sendServiceMsg(final Socket scoket,final String msg){ new Thread(){ public void run() { try { DataOutputStream dos = new DataOutputStream(scoket.getOutputStream()); dos.writeUTF(msg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } /** * 从参数Socket中获取最新消息 * @param socket */ private static void startReader(final Socket socket){ new Thread(){ public void run() { DataInputStream reader; try { reader = new DataInputStream(socket.getInputStream()); while(true){ // System.out.println("***等待客户端输入***"); //读取数据 String msg = reader.readUTF(); System.out.println("客户端的信息:" + msg); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } }
运行效果:
服务端
--开启服务器,监听端口 9999 -- --等待客户端连接-- 得到客户端连接:Socket[addr=/10.20.11.225,port=60248,localport=9999] 爱我你怕了么 我的信息:爱我你怕了么 --等待客户端连接-- 客户端的信息:hehehehehehehe 客户端的信息:pa le
客户端:
E/tag: 建立连接 E/tag: 服务端消息: 爱我你怕了么 E/tag: 我的消息:hehehehehehehe E/tag: 我的消息:pa le
参考:http://blog.csdn.net/wanxuedong/article/details/54865288
相关文章推荐
- Android中socket编程实现简单的客户端和服务器之间的通信
- android的Socket编程---实现简单的服务器,并与客户端通信
- Android客户端与PC服务器实现Socket通信(wifi)
- Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket相关知识
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- Socket编程——基于TCP实现自己的通信协议
- 【转】Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- java 通过 socket 实现 服务器和客户端的通信 TCP
- android 开发之socket编程 UDP和TCP通信实现
- Android客户端与PC服务器实现Socket通信(wifi)
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- Android客户端与PC服务器实现Socket通信(wifi)
- Socket编程总结—Android手机服务器与多个Android手机客户端之间的通信(非阻塞)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket模型使用