客户端(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

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |