ios udpsocket 怎么一直监听端口

ios udpsocket 怎么一直监听端口,第1张

package yhb;
import javaioIOException;
import javanet;
/不知道是客户端还是服务器端所以在MAIN方法里只是起了一个处理UDP线程
/
public class CSDNudp {
public static void main(String[] args)
{
new Thread(new UDPThread())start();
}
}
class UDPThread implements Runnable {
byte[] buf = new byte[1024];
private int UDP_PORT=9999;
public void run() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(UDP_PORT);
} catch (BindException e) {
Systemoutprintln("UDP端口使用中请重关闭程序启服务器");
} catch (SocketException e) {
eprintStackTrace();
}
/用这个来处理循环接收数据包比较合理,服务器接收数据包一般都是转发至客户端,而客户端接收数据包一般处理后再发送到服务器,很复杂。不会
close()掉,下面只是简单的Systemoutprintln("收到数据包!")/
while (ds != null) {
DatagramPacket dp = new DatagramPacket(buf, buflength);
try {
dsreceive(dp);
Systemoutprintln("收到数据包!");
} catch (IOException e) {
eprintStackTrace();
}
}
}
}

在OSI参考模型中,从下至上,每一层完成不同的、目标明确的功能。

1、物理层(Physical Layer)

物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。

在这一层,数据的单位称为比特(bit)。

属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V35、RJ-45等。

2、数据链路层(Data Link Layer)

数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

在这一层,数据的单位称为帧(frame)。

数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

3、网络层(Network Layer)

网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。

在这一层,数据的单位称为数据包(packet)。

网络层协议的代表包括: IP 、IPX、RIP、OSPF等。

4、传输层(Transport Layer)

传输层是第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

在这一层,数据的单位称为数据段(segment)。

传输层协议的代表包括: TCP、UDP 、SPX等。

5、会话层(Session Layer)

会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

会话层协议的代表包括:NetBIOS、ZIP(AppleTalk区域信息协议)等。

6、表示层(Presentation Layer)

表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

表示层协议的代表包括:ASCII、ASN1、JPEG、MPEG等。

7、应用层(Application Layer)

应用层为 *** 作系统或网络应用程序提供访问网络服务的接口。

应用层协议的代表包括:Telnet、FTP、 >WiFi通信是指手机通过WiFi与外部设备建立连接,并与外部设备进行交互、通信。手机与外部设备的WiFi通信通常是使用Socket来实现的,在这里先介绍一个第三方Socket库(CocoaAsyncSocket)来实现WiFi通信。

CocoaAsyncSocket支持TCP和UDP,其中:

AsyncSocket类是支持TCP的;

AsyncUdpSocket类是支持UDP的。

本文是建立在硬件通过UDP广播包广播自身信息,手机与硬件之间通过TCP连接传输数据。

首先,通过手动连接手机WiFi至外部设备,此时可以获取到外部WiFi的一些信息:
#import <UIKit/UIKith>

通过调用该方法,可以得到外部设备返还的WiFi信息:

获取硬件参数之后,需要确认手机是否已于硬件连接,直接调用方法

若未连接,则需建立手机和硬件之间的socket连接:

CocoaAsyncSocket提供了写入数据和读取数据的方法:

数据写入具体格式需要根据硬件要求来决定,这里提供几种常用的数据类型转换方法以供参考:

本Demo CocoaAsyncSocket使用的是742版本
SocketHelp

非局域网环境的点对点连接实现起来比较困难,主要是现在NAT太多了。
如果A、B一方有公网IP的话,通过服务器获取对方IP后可以建立点对点连接;
如果A、B都在NAT内的话,TCP就没办法了,必须通过服务器中转;UDP可以实现部分情况下的点对点,但是无法覆盖所有情况。
如果考虑到防火墙的话,就更不现实了,事实上的确有很多网络(比如教育网),尽管是公网IP,但是却不能建立server,需要防火墙开端口。
这也就是有公网IP的电驴客户端可以获得highid的原因了:此类用户可以和任何eMule兼容客户端连接与下载。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12904384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存