linux有gprs也有线怎么选择

linux有gprs也有线怎么选择,第1张

认情况在/etc/ppp/目录下建立文件gprs-connect-chat,内容如下(每个参数解释在ppp-howto中有详细解释。它是在ppp

底层会话的时候给chat进程的参数每行是一个“期望/发送”的组合序列。当出现一些经典的错误如: "LCP: timeout sending

Config-Requests" ,"serial line is not 8 bit clean...",“serial line is

looped

back”等,去参看方式2提到的两个文档,或者google。注意,为什么不能确切地给出解决的方式,原因是打印出来的同一个错误信息,我称之为现象,

同一现象可能是由很多种原因造成的,需要自己实地排查。)

#/etc/ppp/gprs-connect-chat

TIMEOUT 15

ABORT '\nBUSY\r'

ABORT '\nNO ANSWER\r'

ABORT '\nRINGING\r\n\r\nRINGING\r'

#'' AT

#'OK-+++\c-OK' ATH0

TIMEOUT 40

'' \rAT

OK ATS0=0 #这些都是标准的at命令,建议查看随模块的at命令手册

OK ATE0V1

OK AT+CGDCONT=1,"IP","CMNET" #设置isp接入网关为中国移动的cmnet,如果你想 获得更多访问资源的话

OK ATDT*99***1# #中国移动gprs的接入号吗

CONNECT ''

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

建立文件/etc/ppp/peers/gprs,它的作用是给pppd进程提供配置参数(详见man 8 pppd的输出内容,如果出现问题这个将是非常重要的参考页),内容如下:

#/etc/ppp/peers/gprs

# Usage: root>pppd call gprs

/dev/s3c2410_serial1 #改成自己的端口名

115200#改成自己串口波特率

nocrtscts

#可能你的串口是需要crtscts,硬件流控的,这是由你的串口决定的,一般嵌入式系统的串口没有带硬件流控,也不需要就加nocrtscts

modem #这个参数使得pppd进程将等待模块发回的CD (Carrier Detect)信号,与local真好相反

#noauth

debug #把调试信息输出到/var/log/messages,在调试成功后去掉它,以减少垃圾的产生。

nodetach

#hide-password

usepeerdns #以下的3个参数一般不可少

noipdefault

defaultroute

user smsong #设置接入的用户名,在chap-secrets或者pap-secets中使用

0.0.0.0:0.0.0.0 #本地和远端的ip都设为0使得接入的isp分配本地的ip地址

ipcp-accept-local #要求peer也就是isp给自己非配动态的IP地址

#ipcp-accept-remote

#lcp-echo-failure 12

#lcp-echo-interval 3

noccp #不需要压缩控制协议,有可能对端不需要,根据自己的isp的情况

#novj

#novjccomp

persist #保证在连接断开的情况下不退出,并尝试重新打开连接

connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'

#pppd调用chat会话进程接入对端isp,启动对端的pppd,然后本地pppd与对端的pppd一起进行协

#商网络参数和chap/pap认证,成功后,再进行ncp层的ip的分配。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#/etc/ppp/chap-secets

# Secrets for authentication using CHAP

# client server secret IP addresses

####### redhat-config-network will overwrite this part!!! (begin) ##########

####### redhat-config-network will overwrite this part!!! (end) ############

smsong * 123456 *

有点地区的GPRS可能使用pap方式认证接入用户,所以在同一级目录下,创建pap-secets文件,内容与chap-secets类似有4项的内容第2和第4项一般不限制就用*(星号)代表。反正要你在/etc/ppp/下放着这两个文件就好。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在建立了ppp0连接以后可以使用ctrl+c或者下面的脚本程序ppp-off断开ppp连接

#/etc/ppp/ppp-off

#!/bin/sh

######################################################################

#

# Determine the device to be terminated.

#

if [ "$1" = "" ]then

DEVICE=ppp0

else

DEVICE=$1

fi

######################################################################

#

# If the ppp0 pid file is present then the program is running. Stop it.

if [ -r /var/run/$DEVICE.pid ]then

kill -INT `cat /var/run/$DEVICE.pid`

#

# If the kill did not work then there is no process running for this

# pid. It may also mean that the lock file will be left. You may wish

# to delete the lock file at the same time.

if [ ! "$?" = "0" ]then

rm -f /var/run/$DEVICE.pid

echo "ERROR: Removed stale pid file"

exit 1

fi

#

# Success. Let pppd clean up its own junk.

echo "PPP link to $DEVICE terminated."

exit 0

fi

#

# The ppp process is not running for ppp0

echo "ERROR: PPP link is not active on $DEVICE"

exit 1

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

做好上面的配置以后,输入pppd call gprs命令,注意如果你的gprs这个文件不在/etc/ppp/peers/目录下,在给出标注路径给pppd

[root@localhost ppp_scripts]# pppd call gprs

timeout set to 15 seconds

abort on (\nBUSY\r)

abort on (\nNO ANSWER\r)

abort on (\nRINGING\r\n\r\nRINGING\r)

timeout set to 40 seconds

send (^MAT^M^M)

expect (OK)

^M^M

OK

-- got it

send (ATS0=0^M^M)

expect (OK)

^M

AT^M

OK

-- got it

send (ATE0V1^M^M)

expect (OK)

^M

^M^M

OK

-- got it

send (AT+CGDCONT=1,"IP","CMNET"^M^M)

expect (OK)

^M

ATS0=0^M^M

OK

-- got it

send (ATDT*99***1#^M^M)

expect (CONNECT)

^M

^M^M

OK^M

ATE0V1^M^M

OK^M

^M

OK^M

^M

OK^M

^M

OK^M

^M

CONNECT

-- got it

send (^M)

Serial connection established.

using channel 20

Using interface ppp0

Connect: ppp0 /dev/ttyS0

Warning - secret file /etc/ppp/pap-secrets has world and/or group access

sent [LCP ConfReq id=0x1]

rcvd [LCP ConfRej id=0x1 ]

sent [LCP ConfReq id=0x2 ]

rcvd [LCP ConfAck id=0x2 ]

rcvd [LCP ConfReq id=0x1]

sent [LCP ConfAck id=0x1]

rcvd [CHAP Challenge id=0x1 , name = ""]

Warning - secret file /etc/ppp/chap-secrets has world and/or group access

sent [CHAP Response id=0x1 , name = "smsong"]

rcvd [CHAP Success id=0x1 ""]

CHAP authentication succeeded

CHAP authentication succeeded

sent [CCP ConfReq id=0x1 ]

sent [IPCP ConfReq id=0x1]

rcvd [LCP ProtRej id=0x1 80 fd 01 01 00 0c 1a 04 78 00 18 04 78 00]

Protocol-Reject for 'Compression Control Protocol' (0x80fd) received

rcvd [IPCP ConfReq id=0x1]

sent [IPCP ConfNak id=0x1 ]

rcvd [IPCP ConfRej id=0x1 ]

sent [IPCP ConfReq id=0x2 ]

rcvd [IPCP ConfReq id=0x2]

sent [IPCP ConfAck id=0x2]

rcvd [IPCP ConfNak id=0x2 ]

sent [IPCP ConfReq id=0x3 ]

rcvd [IPCP ConfAck id=0x3 ]

Could not determine remote IP address: defaulting to 10.64.64.64

local IP address 10.144.202.159

remote IP address 10.64.64.64

primary DNS address 211.138.200.69

secondary DNS address 211.103.13.101

Script /etc/ppp/ip-up started (pid 4578)

Script /etc/ppp/ip-up finished (pid 4578), status = 0x0

使用ctrl+c可以断开连接,这样一般不太好测试是不是连接上了(遇有开发不上的控制台只有一个的原因),可以去掉/etc/ppp

/peers/gprs文件中的nodetach参数,要用ping,你需要将eth0即网口给禁用掉,这样ping才会通过ppp0端口寻找路由连接外

网。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

可以用命令tail -f /var/log/messages看到日志:

Mar 20 20:55:55 localhost pppd[4557]: pppd 2.4.4 started by root, uid 0

Mar 20 20:55:56 localhost chat[4558]: timeout set to 15 seconds

Mar 20 20:55:56 localhost chat[4558]: abort on (\nBUSY\r)

Mar 20 20:55:56 localhost chat[4558]: abort on (\nNO ANSWER\r)

Mar 20 20:55:56 localhost chat[4558]: abort on (\nRINGING\r\n\r\nRINGING\r)

Mar 20 20:55:56 localhost chat[4558]: timeout set to 40 seconds

Mar 20 20:55:56 localhost chat[4558]: send (^MAT^M^M)

Mar 20 20:55:56 localhost chat[4558]: expect (OK)

Mar 20 20:55:56 localhost chat[4558]: ^M^M

Mar 20 20:55:56 localhost chat[4558]: OK

Mar 20 20:55:56 localhost chat[4558]: -- got it

Mar 20 20:55:56 localhost chat[4558]: send (ATS0=0^M^M)

Mar 20 20:55:56 localhost chat[4558]: expect (OK)

Mar 20 20:55:56 localhost chat[4558]: ^M

Mar 20 20:55:56 localhost chat[4558]: AT^M

Mar 20 20:55:56 localhost chat[4558]: OK

Mar 20 20:55:56 localhost chat[4558]: -- got it

Mar 20 20:55:56 localhost chat[4558]: send (ATE0V1^M^M)

Mar 20 20:55:56 localhost chat[4558]: expect (OK)

Mar 20 20:55:56 localhost chat[4558]: ^M

Mar 20 20:55:56 localhost chat[4558]: ^M^M

Mar 20 20:55:56 localhost chat[4558]: OK

Mar 20 20:55:56 localhost chat[4558]: -- got it

Mar 20 20:55:56 localhost chat[4558]: send (AT+CGDCONT=1,"IP","CMNET"^M^M)

Mar 20 20:55:57 localhost chat[4558]: expect (OK)

Mar 20 20:55:57 localhost chat[4558]: ^M

Mar 20 20:55:57 localhost chat[4558]: ATS0=0^M^M

Mar 20 20:55:57 localhost chat[4558]: OK

Mar 20 20:55:57 localhost chat[4558]: -- got it

Mar 20 20:55:57 localhost chat[4558]: send (ATDT*99***1#^M^M)

Mar 20 20:55:57 localhost chat[4558]: expect (CONNECT)

Mar 20 20:55:57 localhost chat[4558]: ^M

Mar 20 20:55:57 localhost chat[4558]: ^M^M

Mar 20 20:55:57 localhost chat[4558]: OK^M

Mar 20 20:55:57 localhost chat[4558]: ATE0V1^M^M

Mar 20 20:55:57 localhost chat[4558]: OK^M

Mar 20 20:55:57 localhost chat[4558]: ^M

Mar 20 20:55:57 localhost chat[4558]: OK^M

Mar 20 20:55:57 localhost chat[4558]: ^M

Mar 20 20:55:57 localhost chat[4558]: OK^M

Mar 20 20:55:57 localhost chat[4558]: ^M

Mar 20 20:55:57 localhost chat[4558]: OK^M

Mar 20 20:55:57 localhost chat[4558]: ^M

Mar 20 20:55:57 localhost chat[4558]: CONNECT

Mar 20 20:55:57 localhost chat[4558]: -- got it

Mar 20 20:55:57 localhost chat[4558]: send (^M)

Mar 20 20:55:57 localhost pppd[4557]: Serial connection established.

Mar 20 20:55:57 localhost pppd[4557]: Using interface ppp0

Mar 20 20:55:57 localhost pppd[4557]: Connect: ppp0 /dev/ttyS0

Mar 20 20:55:58 localhost pppd[4557]: Warning - secret file /etc/ppp/pap-secrets has world and/or group access

Mar 20 20:56:00 localhost pppd[4557]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access

Mar 20 20:56:00 localhost pppd[4557]: CHAP authentication succeeded

Mar 20 20:56:00 localhost pppd[4557]: CHAP authentication succeeded

Mar 20 20:56:01 localhost kernel: PPP Deflate Compression module registered

Mar 20 20:56:02 localhost pppd[4557]: Could not determine remote IP address: defaulting to 10.64.64.64

Mar 20 20:56:02 localhost pppd[4557]: local IP address 10.144.202.159

Mar 20 20:56:02 localhost pppd[4557]: remote IP address 10.64.64.64

Mar 20 20:56:02 localhost pppd[4557]: primary DNS address 211.138.200.69

Mar 20 20:56:02 localhost pppd[4557]: secondary DNS address 211.103.13.101

//下面是一个实例

/**    

* socket.io chat    

*    

*/    

     

var web = require('QuickWeb')    

     

// undefined    

var _ = undefined     

     

/**    

 * 创建一个房间    

 *    

 * @param {string} room 房间名称    

 * @param {socket.io} io socket.io实例    

 */    

var Room = module.exports = function (room, io) {    

// 初始化socket.io实例,仅在第一次创建房间时需要设置io参数    

if (typeof io != 'undefined')    

Room.prototype.io = io    

var io = this.io    

   

// 房间成员列表    

var nicknames = this.nicknames = {}    

var onlinesum = this.onlinesum = 0    

   

// 握手验证,如果是登录用户,则自动获取其昵称    

io.set('authorization', function (handshakeData, callback) {    

// 通过客户端的cookie字符串来获取其session数据    

var sessionObject = handshakeData.sessionObject = web.session.getByCookie(handshakeData.headers.cookie)    

   

// 如果不是登录用户,则自动为其设置一个昵称    

var nickname = sessionObject.data.nickname    

if (typeof nickname != 'string' || nickname == '')    

nickname = '#' + Math.floor(Math.random() * 1000) + '' + (new Date().getTime() % 86400000)    

sessionObject.data.nickname = nickname    

   

callback(null, true)    

})    

   

/** 连接处理 */    

var connectionHandle = function (socket) {    

onlinesum++    

// 获取session    

var session = socket.handshake.sessionObject.data    

var nickname = session.nickname    

   

// 保持session,以免session过期    

var hold_session = socket.handshake.sessionObject.hold    

   

/** 刷新在线列表 */    

refresh_online = function () {    

var n = []    

for (var i in nicknames)    

n.push(i)    

socket.broadcast.emit('online list', n)    

socket.emit('online list', n)    

}    

   

// 新成员加入时,通知其他成员    

nicknames[nickname] = socket    

refresh_online()    

socket.broadcast.emit('system message', nickname + '回来了,大家赶紧去喷他~~')    

   

/** 公共消息 */    

socket.on('public message', function (msg, cb) {    

hold_session()    

var timestamp = new Date().getTime()    

socket.broadcast.emit('public message', nickname, msg, timestamp)    

cb()    

})    

   

/** 私人消息 */    

socket.on('private message', function (to, msg, cb) {    

hold_session()    

var timestamp = new Date().getTime()    

var err = ''    

for (var i in to) {    

var target = nicknames[to[i]]    

if (target) {    

cb()    

target.emit('private message', nickname, msg, timestamp)    

}    

else {    

err += '“' + to[i] + '”不在线\n'    

}    

}    

if (err != '')    

cb(err)    

})    

   

/** 断开来连接 */    

socket.on('disconnect', function () {    

delete nicknames[nickname]    

onlinesum--    

socket.broadcast.emit('system message', nickname + '悄悄地离开了。。。')    

refresh_online()    

})    

   

/** 命令 */    

socket.on('command', function (args, cb) {    

if (args.length < 1) {    

cb('无效的命令')    

return    

}    

switch (args[0]) {    

/* 查询或更改昵称 */    

case 'nick':    

var nick = args[1]    

if (typeof nick == 'undefined')    

cb(_, '你的昵称是:' + nickname)    

else    

if (nick == nickname)    

cb('你的昵称本来就是“' + nick + '”嘛,不需要改')    

else if (nicknameIsUsed(nick))    

cb('昵称“' + nick + '”已被占用')    

else {    

nicknames[nick] = nicknames[nickname]    

delete nicknames[nickname]    

var oldnick = nickname    

session.nickname = nickname = nick    

cb(_, '昵称已更改为“' + nick + '”')    

// 通知其他人    

refresh_online()    

socket.broadcast.emit('system message', '“' + oldnick + '”的昵称已改为“' + nick + '”')    

}    

break    

   

/* 在线人数 */    

case 'online':    

cb(_, '当前共有' + onlinesum + '个人在线')    

break    

   

/* 帮助 */    

default:    

cb(_, strHelp)    

}    

})    

}    

   

/* 注册聊天室 */    

if (typeof room == 'undefined')    

room = ''    

io.of('/' + room).on('connection', connectionHandle)    

   

   

/** 检查昵称是否被占用 */    

var nicknameIsUsed = function (nickname) {    

for (var i in nicknames)    

if (i == nickname)    

return true    

return false    

}    

}    

   

var strHelp = '输入$help获取帮助\n\    

========= 系统命令 ========\n\    

**$nick** [昵称] 查看或更改昵称\n\    

**$online** 当前在线人数\n\    

**$clear** 清空消息\n\    

========= 使用技巧 ========\n\    

**给某人发送消息** @对方昵称 消息内容(可同时@多个人)\n\    

**发送图片** !图片url\n\    

**发送链接** [网址]\n\    

'

之前遇到过,不过都是一年前了

你是用的UDP还是TCP协议,然后你看看你整个程序流程是否正确,是否正确将IP和端口绑定,并设置了最大连接数之类的,客户端连接数目是否超过服务器最大可接收数据?服务器端是否是接收到新数据后,创建一个新的进程来处理新到的数据,而服务器主程序继续等待下一个即将到达的数据(不然你发送下一个数据的时候服务器可能还没有将上一个数据处理完成,那么这个数据就可能会丢失了)?

反正出现这个问题的原因非常多,你可以用GDB调试工具跟踪一下,应该能找到原因所在。

仔细点,相信你能解决


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

原文地址:https://54852.com/yw/7600169.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存