LEQ*_*ADA 9 java ubuntu at-command
我有一个数据卡中兴MF190.我想使用AT命令在2G或3G中注册并通过datacard访问互联网.找到这篇关于如何进行数据调用的文章:
AT+cgatt=1
AT+CGDCONT=1,”IP”,”epc.tmobile.com” //I used my operator PDP context
AT+CGACT=1,1
Run Code Online (Sandbox Code Playgroud)
但是从OS终端ping显示100%的包丢失.我试过Ubuntu 14和Windows 7.
如何在Ubuntu上使用datacard将AT连接到AT命令?
我给了@ tripleee的答案赏金,因为它比第一个答案更丰满,并回答了我的所有问题.但我对答案不满意,所以我会在一周内回答我自己的问题.
在我的回答中,我将展示如何使用Java处理此过程.因此,请不要将此问题移至其他Stack Exchange网站.
据我所知,wvdial使用ppp 守护进程使用调制解调器连接到互联网。wvdial预装在桌面版本的 Ubuntu 上。
wvdial使用位于/etc/wvdial.conf. 我们来编辑这个文件。输入你的终端
sudo nano /etc/wvdial.conf
Run Code Online (Sandbox Code Playgroud)
你会看到这样的东西
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Stupid Mode = yes
ISDN = 0
Modem Type = Analog Modem
New PPPD = yes
Phone = *99#
Modem = /dev/ttyUSB2
Username = ''
Password = ''
Baud = 9600
Dial Timeout = 30
Dial Attempts = 3
Run Code Online (Sandbox Code Playgroud)
您可以在wvdial.conf(5) - Linux 手册页中找到所有键的说明。如果您需要更改提供商的拨号号码、用户名、密码或有关连接和设备的任何其他信息,您可以更改文件内容并保存。
中兴MF190有3个串口。通常是ttyUSB0,ttyUSB1和ttyUSB2。就我而言,ttyUSB2是用于互联网连接。它不适用于其他端口。因此,您需要为您的调制解调器找到正确的串行端口。
有一个自动配置器,可以编辑wvdial.conf文件、设置串行端口波特率等。由于它并不总是配置正确,我不建议使用它:
sudo wvdialconf /etc/wvdial.conf
Run Code Online (Sandbox Code Playgroud)
如果您手动配置wvdial会更好。
现在,当您的设备已连接并且wvdial配置为与设备一起使用时,您可以从终端执行此行:
wvdial
Run Code Online (Sandbox Code Playgroud)
你会看到很多行。但如果你看到这些线条——你就成功了。
local IP address XX.XX.XX.XX
remote IP address XX.XX.XX.XX
primary DNS address XX.XX.XX.XX
secondary DNS address XX.XX.XX.XX
Run Code Online (Sandbox Code Playgroud)
现在,我们如何在编程中使用它?我将提供一些在 Java 上使用它的代码。您可以使用此代码进行拨号。
public int dialer() {
// status for debug. If status == 4 then you connected successfully
int status;
// create process of wvdial
ProcessBuilder builder = new ProcessBuilder("wvdial");
try {
// start wvdial
final Process process = builder.start();
// wvdial listener thread
final Thread ioThread = new Thread() {
@Override
public void run() {
try {
final BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
// wvdial output line
String line;
while ((line = reader.readLine()) != null) {
// if "local IP address" line detected set status 1
if (line.contains("local IP address")) {
status = 1;
}
if (line.contains("remote IP address")) {
status = 2;
}
if (line.contains("primary DNS address")) {
status = 3;
}
if (line.contains("secondary DNS address")) {
status = 4;
}
}
reader.close();
} catch (final Exception e) {
}
}
};
// start listener
ioThread.start();
// wait 6 secs and return status. Some kind of timeout
Thread.sleep(6000);
} catch (Exception e) {
}
return status;
}
Run Code Online (Sandbox Code Playgroud)
这是一种断开器方法。您所需要做的就是终止wvdial进程,线程将被销毁:
public boolean disconnect() {
ProcessBuilder builder = new ProcessBuilder("pkill", "wvdial");
try {
builder.start();
return true;
} catch (IOException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1331 次 |
| 最近记录: |