客户端(android)和服务器端(swing) Scoket通信实例

2023-12-13 10:08

本文主要是介绍客户端(android)和服务器端(swing) Scoket通信实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天学习了Socket通信,特来此留贴一份以作纪念,废话不多说,直接进入主题:
         一个Socket通信的完成,需要客户端和服务器端的配合,这个配合就好比,两个人在电话中聊天,当甲拨出号码,乙在另一头接起电话时,他们直接就已经搭建了一个沟通的桥梁,对于客户端和服务器端是一样的。客户端通过Socket向指定ip地址的某端口发出数据通信请求,而服务器端此时也正在(违禁词语-已隐藏)该端口的情况,也就是说,对于指定的ip地址和端口号我们完全可以认为是甲乙电话通讯时的电话号码。
       Socket通信分为两种一个是UDP,一个是TCP,UDP的好处是:速度快,但是缺点是此协议只管发送数据,并不管对方是否接收到数据,而TCP每次发出数据后都要等待对方传回数据做以肯定,然后再发送下一部分数据。但是速度不如UDP快。
    下面是我做的实例中的部分代码:
     第一部分:我利用swing写了一个服务器端,用于(违禁词语-已隐藏)接收客户端发送来的数据,具体的界面和代码如下所示:
195234hlyhjo4xw3iob5wb.jpg
  1. public class SocketService extends JFrame {
  2. private JTextField nameTxt=null;
  3. String id="";
  4. public SocketService(){

  5. this.init();
  6. }
  7. public void init(){
  8. this.setTitle("Tcp服务器端");
  9. this.setBounds(100,100,400,250);
  10. this.createUI();
  11. //this.setVisible(true);
  12. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  13. }

  14. public void createUI(){
  15. JPanel panel=new JPanel();
  16. //添加边框
  17. Border border=BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
  18. TitledBorder tBorder=BorderFactory.createTitledBorder(border,"校验面板",TitledBorder.CENTER,TitledBorder.TOP);
  19. panel.setBorder(tBorder);
  20. panel.setLayout(null);
  21. this.add(panel);
  22. //网卡地址
  23. JLabel nameLbl=new JLabel("接收客户端数据:");
  24. nameLbl.setBounds(10,30,140,25);
  25. panel.add(nameLbl);
  26. nameTxt=new JTextField();
  27. nameTxt.setBounds(130,30,230,22);
  28. panel.add(nameTxt);


  29. //按钮
  30. JButton btn=new JButton("开启TCP服务");
  31. btn.setBounds(40,160,140,22);
  32. panel.add(btn);


  33. btn.addActionListener(new ActionListener(){
  34. public void actionPerformed(ActionEvent arg0){
  35. nameTxt.setText("");
  36. new TCPThread().start();
  37. }
  38. });


  39. JButton btn2=new JButton("开启UDP服务");
  40. btn2.setBounds(220, 160, 140, 22);
  41. panel.add(btn2);
  42. btn2.addActionListener(new ActionListener(){
  43. public void actionPerformed(ActionEvent arg0){
  44. nameTxt.setText("");
  45. new UDPThread().start();

  46. }
  47. });

  48. }
  49. //Tcp传输的操作过程
  50. class TCPThread extends Thread{

  51. public void run(){
  52. try {
  53. while(true){
  54. ServerSocket tcpSocket=null; 
  55. tcpSocket=new ServerSocket(4567);
  56. Socket s=null;
  57. s=tcpSocket.accept();//如果未收到数据,此句不会继续向下执行,一直处于(违禁词语-已隐藏)状态
  58. InputStream in=s.getInputStream();
  59. byte[] buffer=new byte[1024*4];
  60. int temp=0;
  61. while((temp=in.read(buffer))!=-1){
  62. nameTxt.setText(new String(buffer,0,temp));
  63. }
  64. s.close();
  65. tcpSocket.close();


  66. }
  67. } catch (IOException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }


  71. }

  72. }
  73. //UDP传输的操作过程
  74. class UDPThread extends Thread{

  75. public void run(){
  76. try {
  77. DatagramSocket d=new DatagramSocket(5678);
  78. byte[] data=new byte[1024];
  79. DatagramPacket packer=new DatagramPacket(data, data.length);
  80. try {
  81. d.receive(packer);//如果未收到数据,此句不会继续向下执行,一直处于(违禁词语-已隐藏)状态
  82. System.out.println(packer.getLength());
  83. } catch (IOException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87. } catch (SocketException e) {
  88. // TODO Auto-generated catch block
  89. e.printStackTrace();
  90. }


  91. }


  92. }
复制代码
第二部分:客户端是利用android平台,具体的界面和他代码如下所示:
195345t1u9tetu6kwc66k1.jpg
  1. public class SocketClient extends Activity {
  2. /** Called when the activity is first created. */
  3. TextView tv = null;

  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. Button tcpbtn = (Button) this.findViewById(R.string.Id1);
  9. Button udpbtn = (Button) this.findViewById(R.string.Id2);
  10. tv = (TextView) this.findViewById(R.string.text1);


  11. //tcp通信过程
  12. tcpbtn.setOnClickListener(new OnClickListener() {
  13. @Override
  14. public void onClick(View v) {
  15. try {
  16. Socket s = new Socket("192.168.0.115", 4567);//创建一个socket对象,绑定要通信的服务器端Ip和端口
  17. OutputStream out = s.getOutputStream();//将要传递的数据进行字节数组处理,然后以输出流的形式发送出去
  18. out.write(tv.getText().toString().getBytes());
  19. out.flush();
  20. } catch (UnknownHostException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. } catch (IOException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }

  27. }

  28. });

  29. //udp通信过程
  30. udpbtn.setOnClickListener(new OnClickListener(){

  31. @Override
  32. public void onClick(View v) {
  33. // TODO Auto-generated method stub
  34. try {
  35. DatagramSocket ds=new DatagramSocket(5678);
  36. InetAddress serverAddr= InetAddress.getByName("192.168.0.115");//绑定要通信的服务器端IP
  37. byte[] data=tv.getText().toString().getBytes();
  38. DatagramPacket packet=new DatagramPacket(data,data.length,serverAddr,5678);
  39. ds.send(packet);
  40. } catch (Exception e) {
  41. // TODO Aut
  42. o-generated catch block
  43. e.printStackTrace();
  44. }
  45. }



  46. });
  47. }
  48. }
复制代码
经过测试在服务器端,如下图所示,可以接收到客户端发送过来的数据为:“hello”
1954281vxsoyxyoa5z1a1l.jpg

这篇关于客户端(android)和服务器端(swing) Scoket通信实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488054

相关文章

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清