两个设备同时向测试机发送文件,在未超时的情况下,测试机没有收到第二个接受请求

探讨了蓝牙OBEX协议下,设备同时接收多个文件的限制。解析了日志,发现当一个文件传输未完成时,设备拒绝了第二个传输请求。这是由于蓝牙OBEX协议规定,同一时间只能进行一个文件传输。

最近遇到蓝牙接收文件的一个问题,先有一个手机给测试机发送文件,当快接收完的时候,第二个手机给测试机发送文件。

但是测试机没有收到第二个接收请求

抓取了这个过程中的log。

接受第一个文件:

07-04 15:24:34.528  6957  7052 D ObexServerSockets1: Accepted socket connection from: ServerSocket: Type: TYPE_L2CAP Channel: 4131

07-04 15:24:34.528  6957  7052 D ObexServerSockets1: onConnect() socket: android.bluetooth.BluetoothSocket@1307f14 mConAccepted = false

当第一个快接收完的时候,另一个手机给测试机发文件 

07-04 15:24:49.468  6957  7052 D ObexServerSockets1: Accepted socket connection from: ServerSocket: Type: TYPE_L2CAP Channel: 4131

07-04 15:24:49.468  6957  7052 D ObexServerSockets1: onConnect() socket: android.bluetooth.BluetoothSocket@e557dd5 mConAccepted = true

07-04 15:24:49.468  6957  7052 I ObexServerSockets1: RemoteDevice is invalid - creating ObexRejectServer.

可以看到接第二个文件的时候,提示mConAccepted为true,说明当前已经存在一个链接。

结合源码中的解释,如下截图:

boolean isValid = ObexServerSockets.this.onConnect(device, connSocket);

                        if(isValid == false) {
                            /* Close connection if we already have a connection with another device
                             * by responding to the OBEX connect request.
                             */
                            Log.i(TAG, "RemoteDevice is invalid - creating ObexRejectServer.");
                            BluetoothObexTransport obexTrans =
                                    new BluetoothObexTransport(connSocket);
                            // Create and detach a selfdestructing ServerSession to respond to any
                            // incoming OBEX signals.
                            new ServerSession(obexTrans,
                                    new ObexRejectServer(
                                            ResponseCodes.OBEX_HTTP_UNAVAILABLE,
                                            connSocket),
                                    null);

如果已经有一个连接存在,那么就关闭将要建立的连接。

所以同时给测试机发送文件,在第一个没有接收完的情况下,第二个文件是不能被接受的,这个是蓝牙OBEX协议的规定。

<think>首先,用户的问题是如何在没有ncat命令的情况下同时进行两个TCP连接。这是在之前的实验方案中提到的,当时我建议使用ncat来建立多个连接以测试NAT模式。现在用户想知道替代方法。 我的回答需要: 1. 使用中文。 2. 回答完问题后,提出3-5个相关问题。 3. 相关问题必须以"§§相关问题§§"开头,并且不能换行分散。 4. 相关问题必须基于用户的问题和我的回答。 用户的问题是:"在没有ncat命令的情况下,如何同时进行两个tcp连接" 在之前的上下文中,这是在实验方案中用于测试NAT的。所以,我需要提供替代方法来建立两个TCP连接,而不使用ncat。 可能的替代方法: - 使用其他命令行工具:在Windows上,可以使用curl、Test-NetConnection、或者PowerShell的Invoke-WebRequest。 - 使用多个命令:在一个cmd窗口中运行一个连接,在另一个窗口中运行另一个。 - 使用简单的网络工具:如ping、telnet(但telnet是TCP,可以用来测试连接)。 - 具体到实验:用户需要在主机2上建立两个TCP连接到外部服务器(如example.com:80)。 步骤: 1. **解释方法**:提供详细步骤,如何在Windows上同时建立两个TCP连接。 2. **确保同时性**:用户需要同时抓包,所以连接应该大致同时发生。 3. **工具可用性**:用户提到可以使用简单的cmd命令,但不能使用脚本。所以,用基本命令。 替代方案: - 使用curl:在主机2上打开两个cmd窗口,每个运行curl命令。例如: - 窗口1: `curl http://example.com` - 窗口2: `curl http://example.com` 这会建立两个TCP连接(HTTP over TCP)。 - 使用Test-NetConnection:在PowerShell中: - `Test-NetConnection -ComputerName example.com -Port 80` 运行两次。 - 使用telnet:如果启用,`telnet example.com 80`,然后输入一些数据。 - 使用浏览器或其他应用,但用户指定了cmd命令,所以坚持命令行。 为了同时进行: - 建议用户打开两个cmd窗口,并快速运行命令,或同时运行(手动同步)。 - 或者,使用后台启动,但在cmd中有限制。 详细实验方案: - 在主机2上: - 打开第一个cmd窗口:运行 `curl http://example.com` - 打开第二个cmd窗口:运行 `curl http://example.com` - 在运行前启动Wireshark抓包。 现在,构建回答: - 先回答问题。 - 然后提出相关问题。 相关问题必须基于用户的问题和我的回答: - 用户的问题是关于替代方法建立TCP连接。 - 我的回答将提供方法。 - 相关问题可以涉及: 1. 如果没有curl怎么办? 2. 如何确保连接是同时的? 3. 其他协议如UDP的测试。 4. 实验中的常见问题。 5. 扩展NAT测试。 确保3-5个相关问题。 回答结构: 1. 介绍:重述问题。 2. 详细方法:如何同时进行两个TCP连接。 3. 注意事项。 4. 相关问题。 最后输出"§§相关问题§§"后跟问题列表。 相关问题示例: 1. 如果主机2没有安装curl或telnet,还有什么其他方法可以建立TCP连接? 2. 在实验中,如何确保两个TCP连接几乎同时发起以测试NAT端口映射? 3. 对于UDP协议,如何设计类似的实验来测试NAT端口变化? 4. 如果使用HTTP连接,如何避免服务器端的影响(如连接复用)? 5. 在Windows上,如何通过命令行工具监控TCP连接状态以验证连接成功? 确保所有内容中文。</think>### 在没有ncat命令的情况下同时进行两个TCP连接的实验方法 在Windows环境中,如果无法使用ncat命令(如安装Nmap工具),可以通过其他内置命令行工具(如curl、Test-NetConnection或telnet)实现同时发起两个TCP连接。以下是针对NAT模式检测实验的详细方案(基于先前拓扑:主机2通过路由器连接外部网络)。核心思路是使用多个命令窗口手动发起连接,并通过Wireshark抓包分析端口变化。 #### 替代方法及详细步骤(使用Windows内置工具) 1. **工具选择**: - **curl**:用于HTTP/TCP连接(需安装,Windows 10/11默认可能安装,但可通过下载或使用替代工具)。 - **Test-NetConnection**:PowerShell内置命令,支持TCP端口测试(无需额外安装)。 - **telnet**:传统TCP工具,需手动启用(Windows默认禁用)。 - 如果以上均不可用,可使用**ping**结合ICMP协议(但ICMP无端口,仅辅助IP变化分析)。 2. **启用必要工具**(如安装): - **启用telnet**:在主机2的cmd中运行: ```cmd dism /online /Enable-Feature /FeatureName:TelnetClient ``` - **安装curl**:从[curl官网](https://curl.se/windows/)下载并添加到PATH环境变量。 - **使用Test-NetConnection**:在PowerShell中直接运行(无需安装)。 3. **同时发起两个TCP连接的步骤**: - **前提**:确保主机2可访问外部服务器(如`example.com`端口80),并在主机1和主机2上提前启动Wireshark抓包(主机2抓LAN口,主机1抓WAN口)。 - **方法1:使用curl(推荐)**: - 打开两个独立的cmd窗口(手动同步)。 - 在第一个窗口运行:`curl http://example.com --connect-timeout 5`(发起TCP连接到80端口)。 - 在第二个窗口运行:`curl http://example.com --connect-timeout 5`。 - **原理**:curl会建立TCP连接发送HTTP请求,系统自动分配不同本地端口。超时参数确保连接快速关闭。 - **抓包分析**:在Wireshark中过滤`tcp and ip.dst == example.com的IP`,比较两个连接的源端口(LAN抓包)和映射后端口(WAN抓包)。 - **方法2:使用Test-NetConnection(PowerShell)**: - 打开两个独立的PowerShell窗口。 - 在第一个窗口运行:`Test-NetConnection -ComputerName example.com -Port 80 -InformationLevel Quiet`(仅测试连接,不输出详情)。 - 在第二个窗口运行相同命令。 - **原理**:此命令会发起TCP SYN请求,模拟完整连接。 - **方法3:使用telnet(基础工具)**: - 打开两个cmd窗口。 - 在第一个窗口运行:`telnet example.com 80`,连接后输入任意字符(如`GET / HTTP/1.0`)后按Enter,然后关闭窗口。 - 在第二个窗口重复相同操作。 - **注意**:telnet连接会保持直到手动断开,需快速操作以确保同时性。 - **方法4:使用ping作为备用(ICMP协议)**: - 如果TCP工具不可用,运行`ping 8.8.8.8 -n 4`在两个窗口中(但ICMP无端口,仅能分析IP变化)。 4. **确保“同时性”的技巧**: - **手动同步**:在主机2上打开两个窗口,先输入命令但不执行;在第三个窗口运行`timeout /t 1`后,快速切换到两个窗口并按Enter执行。 - **降低干扰**:使用`-Timeout`或`--connect-timeout`参数限制连接时间(如5秒),避免长连接影响抓包。 - **验证连接**:在Wireshark中检查TCP握手包(SYN)的时间戳,确保两个SYN包间隔小于1秒。 5. **实验结果分析**: - 在主机2的LAN抓包中,记录两个连接的源IP和源端口(如192.168.1.100:5000和5001)。 - 在主机1的WAN抓包中,找到映射后的源IP和源端口(如路由器WAN IP:6000和6001)。 - **判断NAT模式**:如果映射后端口不同,则为NAPT/Easy IP;如果端口相同但IP不同,则为动态NAT。 #### 注意事项 - **工具可用性**:如果curl/telnet安装,优先使用Test-NetConnection(PowerShell内置)。在Windows 10/11中,可通过`Get-Command Test-NetConnection`验证。 - **抓包过滤**:在Wireshark中使用`tcp.port == 80`过滤,专注于目标端口80的流量。 - **常见问题**:如果连接失败,检查防火墙(允许端口80)或改用知名网站(如`google.com:80`)。 - **扩展性**:此方法也可用于UDP测试(如`Test-NetConnection -ComputerName example.com -Port 53 -UDP`),但UDP无握手,需发送数据包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值