新用户注册 | 会员登录
登录 极速注册
取消
热门标签 | HotTags
当前位置:   开发笔记 > 编程语言 > 正文

android之socket编程(TCP&UDP)

在网络传输中socket是很常见的传输方式。下面介绍一下android中的socket。socket编程一般需要两个部分,分别为客户端和服务器端。先贴出服务器端的代码,具体解释在代码中有注释。由于TC

在网络传输中socket是很常见的传输方式。

下面介绍一下android中的socket。

socket编程一般需要两个部分,分别为客户端和服务器端。

先贴出服务器端的代码,具体解释在代码中有注释。由于TCP协议与UDP协议的代码不同,所以部分代码注释起来了,但是都是亲测。没问题的

==========SocketServiceActivity.java=========

package com.yx.socketservice;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SocketServiceActivity extends Activity {

    private Button startButton;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_socket_service);
        startButton = (Button) findViewById(R.id.startButton);
        startButton.setOnClickListener(new StartButtonListener());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.socket, menu);
        return true;
    }
    
    class StartButtonListener implements OnClickListener{
        @Override
        public void onClick(View arg0) {
            new ServerThread().start();//开启线程
        }
    }
    
    class ServerThread extends Thread{
        /*
        @Override
        public void run() {
            try {
                //创建一个DatagramSocket对象,并指定监听端口
                DatagramSocket socket = new DatagramSocket(3333);
                byte data[] = new byte[1024];
                //接收udp发送的数据包,创建一个空的DatagramPacket对象
                DatagramPacket packet = new DatagramPacket(data, data.length);
                //使用receive方法接收客户端发送的数据
                socket.receive(packet);
                System.out.println(packet.getLength());
                String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
                System.out.println("result--->"+result);
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        
        */
        @Override
        public void run() {//TCP接收
            //声明一个serverSocket对象
            ServerSocket serverSocket = null;
            try {
                //创建serverSocket对象,并让socket监听3333端口
                serverSocket = new ServerSocket(3333);
                //调用serverSocker的accept方法,接收客户端发送的请求
                Socket socket = serverSocket.accept();
                //获取inputstream
                InputStream inputStream = socket.getInputStream();
                byte[] buffer = new byte[1024*4];
                int temp = 0;
                while((temp=inputStream.read(buffer))!=-1){
                    System.out.println(new String(buffer,0,temp));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
        
    }

}
=================AndroidManifest.xml===========


    package="com.yx.socketservice"
    android:versiOnCode="1"
    android:versiOnName="1.0" >

            android:minSdkVersion="8"
        android:targetSdkVersion="18" />

            android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
                    android:name="com.yx.socketservice.SocketServiceActivity"
            android:label="@string/app_name" >
           
               

               
           

       
   




以上是服务器端的代码,下面两个是客户端的代码,客户端仅仅是一个main函数,简单的java工程。


TCP:

package com.yx.forAnrdoid;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {

    /**
     * @param args
     */
    public static void main(String[] args) {
        OutputStream outputStream=null;
        try {
            //创建socket对象,指定服务器的ip和端口
            Socket socket = new Socket("192.168.0.100", 3333);
            //使用InputStream读取硬盘上的文件
            InputStream inputStream  = new FileInputStream("C://Users/Administrator/Desktop/aa.txt");
            //从socket中获取outputstream
            outputStream = socket.getOutputStream();//注意这里outputstream的包不要倒错
            byte[] buffer = new byte[4*1024];
            int temp = 0;
            //将inputstream当中的数据取出,并写入到outputstream中
            while((temp=inputStream.read(buffer))!=-1){
                outputStream.write(buffer, 0, temp);
            }
            outputStream.flush();
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            try {
                outputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}
UDP:

package com.yx.forAnrdoid;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPClient {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        try {
            //创建一个DatagramSocket对象,并指定监听端口
            DatagramSocket socket = new DatagramSocket(3333);
            //创建一个InetAddress
            InetAddress serverAddress = InetAddress.getByName("192.168.0.100");
            String str = "hello";
            byte data[] = str.getBytes();
            //创建一个DatagramPacket对象,并指定要将那个数据包发送到那个网络和端口上
            DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 3333);
            socket.send(packet);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}



推荐阅读
  • client

    Netty拆包粘包问题解决 —— 特殊结束符

    本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • int

    如何使用Java获取服务器硬件信息和磁盘负载率

    如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • client

    Thrift教程初级篇——RPC框架Thrift的安装环境变量配置与第一个实例

    本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • get

    Web学习历程记录(七)——Tomcat基本概念和配置

    本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • get

    java 模拟get post请求_Java后台模拟发送http的get和post请求,并测试

    个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • int

    Python瓦片图下载、合并、绘图、标记的代码示例

    Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • int

    在mac环境下使用nginx配置nodejs代理服务器的步骤

    本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • get

    java命令运行

    Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • get

    解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法

    解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • get

    基于Socket的多个客户端之间的聊天功能实现方法

    基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • get

    使用freemaker生成Java代码的步骤及示例代码

    使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • int

    python3+tkinter实践历程(四)——模仿CRT完成基于socket通信与tkinter的TCP串口客户端

    python3+tkinter实践历程(四)——模仿CRT完成基于socket通信与tkinter的TCP串口客户端
    python3tkinter实践历程(四)——基于socket通信与tkinter的TCP串口客户端(仿CRT)文章目录系列文章目录分享背景制作背景最终功能工具截图展示代码详解系列 ... [详细]
  • window

    UML 包图

    UML 包图
    什么是包包可直接理解为命名空间,文件夹,是用来组织图形的封装,包图可以用来表述功能组命名空间的组织层次。•在面向对象软件开发的视角中&#x ... [详细]
  • get

    Python连接服务器失败:使用aiohttp模拟服务器出现错误问题及解决方法

    本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • get

    java.lang.NoSuchMethodError.getMessage()方法的使用及代码示例

    本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
author-avatar
mthj1688
这个家伙很懒,什么也没留下!
Tags | 热门标签
  • datetime
  • byte
  • fetch
  • go
  • lua
  • callback
  • cmd
  • case
  • hash
  • sum
  • javascript
  • int
  • spring
  • input
  • merge
  • perl
  • client
  • chat
  • audio
  • cookie
  • php7
  • blob
  • scala
  • filter
  • ascii
  • metadata
  • usb
  • get
  • window
  • default
RankList | 热门文章
  • 1 Java 获取本机的IP与MAC地址实现详解
  • 2 java 实现多线程的方法总结
  • 3 Spring使用AspectJ注解和XML配置实现AOP
  • 4 Ubuntu 使用Jni开发实例详解
  • 5 Java中的阻塞队列详细介绍
  • 6 java基于Apache FTP点断续传的文件上传和下载
  • 7 tomcat报错:Wrapper cannot find servlet class ...问题解决
  • 8 JAVA JNI原理详细介绍及简单实例代码
  • 9 Java 将文件转为字节数组知识总结及实例详解
  • 10 Struts2实现文件上传功能实例解析
  • 11 java去除重复对象的简单实例
  • 12 Spring中初始化泛型类的方法实例
  • 13 Java Socket实现文件传输示例代码
  • 14 解决Eclipse配置Tomcat出现Cannot create a server using the selected type错误
  • 15 java生成验证码步骤归纳总结
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有
     

深圳SEO优化公司德宏seo优化哪家好怒江高端网站设计哪家好重庆网络营销推荐郴州网站设计常德建站价格蚌埠网站改版推荐潍坊如何制作网站价格驻马店推广网站报价贺州网站设计报价布吉seo排名文山网站推广方案推荐那曲网站搭建报价通化网站优化按天扣费价格黔东南百度关键词包年推广哪家好保山建设网站哪家好张北seo网站推广公司盐城如何制作网站公司南充外贸网站制作多少钱成都推广网站报价泰安网站搜索优化推荐龙华网站优化排名公司临沧seo优化报价大鹏网站改版报价爱联关键词排名包年推广价格岳阳高端网站设计价格鸡西网站推广方案价格抚顺SEO按效果付费价格开封模板推广公司西安模板制作报价拉萨优化多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化