- 浏览: 439773 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
qja:
Iterator.remove()这个方法也会出错的。
java.util.ConcurrentModificationException 出现的原因和解决办法 -
angeli:
List<String> save = new A ...
java.util.ConcurrentModificationException 出现的原因和解决办法 -
大峰子:
灰常感谢 刚好碰到这个问题, 搜了好多都没找到解决方法
python学习笔记-Python交互模式下方向键出现乱码 -
anypwx:
牛哥,怎么找到的,解决了我的报错问题,谢谢
JSONObject NestableRuntimeException -
tp7300:
确实好很多了,谢谢博主。
Failed to install on device 'emulator-5554': timeout
关于TCP和UDP协议的描述,可参考http://zhoujianghai.iteye.com/blog/1052970
下面是android与PC端使用TCP和UDP协议通信的例子:
以PC端作为服务器,android端使用TCP协议与服务器建立连接,使用UDP协议接受和发送数据。
服务器端代码:
ThunderServer.java
package com.zhoujh.thunder.server; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.util.ArrayList; /** * 服务器端 * @author * zhoujianghai * 2011-5-15 * 下午05:10:50 */ public class ThunderServer{ private static int ID = 1; /**TCP端口 */ private static final int TCP_PORT = 8000; /**UDP端口 */ private static final int UDP_PORT = 9999; /**与服务器已经建立链接的客户端数量 */ private ArrayList<Client> clients = new ArrayList<Client>(); public static void main(String args[]) { new ThunderServer().start(); } private void start() { new UDPThread().start(); ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(TCP_PORT); } catch (IOException e) { e.printStackTrace(); } while (true) { Socket socket = null; try { socket = serverSocket.accept(); System.out.println("socket="+socket); String IP = socket.getInetAddress().getHostAddress(); Client c = new Client(IP); clients.add(c); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeInt(ID++); System.out.println("一个新的客户端已连接,IP:"+IP+";port="+socket.getPort()+"; ID="+(ID-1)); } catch (IOException e) { e.printStackTrace(); }finally{ if(socket != null) { try { socket.close(); socket = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } /** * 客户端:ip地址和udp端口 * @author * zhoujianghai * 2011-5-15 * 下午04:41:09 */ private class Client { String IP; int udpPort; public Client(String IP) { this.IP = IP; } public void setUdpPort(int udpPort) { this.udpPort = udpPort; } } /** * 接收客户端发送的数据,并把接收到的数据发送给所有客户端,使用UDP协议 * @author * zhoujianghai * 2011-5-15 * 下午04:54:03 */ private class UDPThread extends Thread { //服务器每次收发数据的缓冲区,大小是1024个字节 byte[] buf = new byte[1024]; public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(UDP_PORT); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } while(ds != null) { DatagramPacket packet = new DatagramPacket(buf, buf.length); try { //接收数据包 ds.receive(packet); System.out.println("地址:"+packet.getAddress()+" 端口:"+packet.getPort()+"数据:"+new String(packet.getData())); String clientIp = (packet.getAddress().toString().split("/")[1]); for(Client c:clients) { if(clientIp.trim().equals(c.IP) && c.udpPort == 0) { c.setUdpPort(packet.getPort()); } } //把接收到的数据包发送给所有已连接的客户端 System.out.println("clients.size="+clients.size()); for(Client c:clients) { System.out.println("server send:IP="+c.IP+"; udpPort="+c.udpPort); //设置数据包要发送的客户端地址 packet.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort)); ds.send(packet); } } catch (IOException e) { e.printStackTrace(); } } } } }
客户端的核心代码:
public void connectServer(String IP,int port) {
this.IP = IP; try { socket = new DatagramSocket(udpPort); } catch (SocketException e) { e.printStackTrace(); } Socket s = null; try { s = new Socket(IP,port); System.out.println("s="+s); DataInputStream dis = new DataInputStream(s.getInputStream()); int id = dis.readInt(); System.out.println("id="+id); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if(s != null) { try { s.close(); s = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
客户端代码绑定的UDP端口”udpPort“跟服务器端接收到的不一样,为了避免了使用UDP通信时,android客户端接收不到server发送的数据的问题,server端根据接收到的数据得出发送数据包的客户端的ip地址和端口,不需要进行端口的转发,真机和模拟器一样。代码:
String clientIp = (packet.getAddress().toString().split("/")[1]); for(Client c:clients) { if(clientIp.trim().equals(c.IP) && c.udpPort == 0) { c.setUdpPort(packet.getPort()); } }
发表评论
-
warning: libfmodex64.so, needed by ../../lib/linux/Debug/libcocosdenshion.so,
2012-03-13 01:20 2070linux环境下用cocos2d-x开发游戏时,遇到了 wa ... -
在工作线程中创建Toast
2011-10-14 18:11 3757在工作线程中创建Toast,代码如下: p ... -
GridView + ViewFlipper布局界面,模仿“机锋市场”
2011-10-09 18:22 2284源码在附件中,效果如图片 -
fedora14下连接android真机
2011-08-13 13:22 1423在fedora14下搭建好了andro ... -
fedora14下搭建Android开发环境
2011-07-12 23:59 2589一:下载linux版本的JDK,Eclipse,Andr ... -
简述android线程间消息处理机制(Looper、Handler和Message)
2011-06-17 21:51 7737作用:Android的线程间消息处理机制主要是用来处理主 ... -
Android中ImageButton实现“按下”效果
2011-06-16 12:26 7687使用Button的时候,实现“按下”的效果是很重要的,也 ... -
android textview改变部分文字的颜色和string.xml中文字的替换
2011-05-18 18:49 17319一:TextView组件改变部分文字的颜色: Text ... -
AndroiManifest.xml文件中android属性
2011-05-16 11:59 1454android:allowTaskReparentin ... -
windows系统上安装与使用Android NDK r5
2011-01-26 13:17 11378windows系统上安装与使用Android NDK r ... -
android获取屏幕分辨率
2011-01-15 17:05 2138获取屏幕分辨率的代码: ... -
Android编译出现Multiple substitutions specified in non-positional format
2010-12-31 13:28 3952前段时间更新了ADT和Android SDK 2.3, ... -
TextView设置中文粗体
2010-12-30 13:25 5526在xml布局文件中设置android:textStyle=“b ... -
Failed to install on device 'emulator-5554': timeout
2010-12-20 10:41 6230Failed to install on device ... -
解决android logcat不打印信息
2010-11-30 19:06 7940用eclipse进行android开发中经常遇到logcat无 ... -
关于android设备的分辨率
2010-11-29 12:27 1998HVGA (Half-size VGA) 即VGA ... -
Toast的用法
2010-11-18 13:28 4623Toast是android中用来显示快速显示短信息的一种机制, ... -
listview的美化和优化
2010-11-17 13:54 4379在android开发中,listview是比较常用的一个组件, ... -
activity切换特效(类似iphone的进入和退出时的效果)
2010-11-10 23:11 3926关于activity的切换,有很多挺好看的动画实现,最近在项目 ... -
美化listview时遇到的问题
2010-11-08 08:39 2562在android开发中,listview的默认背景颜 ...
相关推荐
在Android平台上进行网络通信时,TCP(传输控制协议)和UDP(用户数据报协议)是两种最常用的协议。本文将深入探讨这两种协议在Android环境下的应用,并基于提供的文件名,介绍相关的源码示例和通信工具。 首先,...
总的来说,理解并掌握Android环境下的TCP和UDP通信是移动开发中的重要技能,这有助于实现各种网络功能,如即时通讯、文件传输等。通过`TCPUtil`这样的工具类,开发者可以更方便地进行网络编程,提高代码的复用性和可...
本项目"android屏幕分享助手源码(udp传输)"提供了这样一个解决方案,它专为Android 5.0及以上版本的设备设计,允许在同一局域网内的其他设备上实时共享屏幕内容。下面将详细介绍其核心技术点和工作原理。 1. **...
实现TCP和UDP通信时,Android开发者需要关注权限问题。由于网络访问涉及用户隐私,Android系统要求在`AndroidManifest.xml`文件中声明`INTERNET`权限: ```xml <uses-permission android:name="android.permission....
本教程将详细探讨Android应用如何使用TCP和UDP这两种常用网络传输协议与服务器进行通信。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议。在Android中,我们通常使用Socket类来实现...
在Android中,实现TCP和UDP通信的基本步骤与Java标准库中的方法相同。开发者需要创建相应的套接字对象,如`ServerSocket`或`DatagramSocket`,并使用输入输出流进行数据的读写。对于TCP,使用`Socket`类进行连接,而...
总结来说,在Android开发中,TCP和UDP是两种基本的网络传输协议。TCP适合对数据传输可靠性要求很高的场景,而UDP适用于对传输性能要求更高的场合。根据实际应用需求选择合适的协议,是开发高质量网络应用的关键。
UDP(User Datagram Protocol)是另一种传输层协议,与TCP相比,UDP是无连接的、不可靠的。它不保证数据的顺序、完整性或到达,而是以尽可能快的速度发送数据,适合实时性要求高的应用,如视频会议、在线游戏等。 ...
在Android平台上进行网络通信开发时,TCP(传输控制协议)和UDP(用户数据报协议)是两种常用的数据传输协议。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,而UDP则是一种无连接的、不可靠的、基于...
在Android平台上进行基于局域网的UDP(User ...总之,基于局域网的Android UDP传输涉及了网络编程基础、Android权限管理和特定API的使用。通过掌握这些知识点,开发者可以构建出能够在设备之间进行快速数据交换的应用。
在Android平台上进行网络编程时,有时会遇到需要同时使用UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)的情况。这两种协议各有特点,UDP是无连接的、不可靠的数据传输协议,而TCP则是一种...
串口通信主要涉及设备间的本地连接,而TCP和UDP则是网络通信的基础协议,用于实现设备间的远程通信。以下将详细介绍这些知识点。 首先,**Android串口通信** 是指Android设备通过串行接口与其他硬件设备(如传感器...
标题中的“非常好用的tcp/udp有人网络调试助手apk,android安卓应用”表明这是一个专为Android设备设计的应用程序,主要用于TCP和UDP网络协议的调试。这类工具在开发、测试或维护网络应用程序时非常有用,可以帮助...
在TCPUDP_Demo中,你可能会看到以下关键代码片段: 1. TCP客户端: - 创建QTcpSocket对象并连接到服务器的IP和端口。 - 实现readyRead()信号处理函数,读取接收到的数据。 - 使用write()函数发送数据。 2. TCP...
在Android应用开发中,网络交互是至关重要的组成部分,它使得应用程序能够与远程服务器进行数据交换,从而实现各种功能,如获取在线数据、上传用户信息、实时通信等。本项目"Android应用源码http、udp、tcp网络交互...
在Android开发中,TCP和UDP Socket是两种常用的网络通信协议,它们允许设备间进行数据传输。这个`Android tcp-udp socket.zip`文件包含了实现这两种协议的客户端和服务器端的示例代码,帮助开发者理解如何在Android...
- **协议验证**:开发者可以验证自己的应用程序是否正确地实现了TCP或UDP协议。 - **性能测试**:通过模拟大量并发连接,评估网络应用在高负载下的表现。 - **安全分析**:监控数据流,检查是否有潜在的安全风险,如...
本篇将详细介绍Android中如何封装和使用TCP与UDP,以及它们的区别。 首先,TCP是一种面向连接的、可靠的传输协议,它保证了数据包的顺序和完整性。在发送数据前,TCP需要建立连接,通过三次握手确保双方的通信能力...
本项目"基于同一个局域网TCP和UDP数据传输"是用Java编程语言实现的,旨在探讨如何在相同局域网环境下通过TCP(传输控制协议)和UDP(用户数据报协议)进行数据的发送与接收。 TCP是一种面向连接的、可靠的传输协议...