{"id":1393,"date":"2025-06-10T10:21:43","date_gmt":"2025-06-10T02:21:43","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/wpcms\/wpdt\/1393.html"},"modified":"2025-06-10T10:21:43","modified_gmt":"2025-06-10T02:21:43","slug":"6%e4%b8%aa%e6%9c%80%e4%bd%b3%e5%bb%89%e4%bb%b7voip%e7%94%b5%e8%af%9d%e6%9c%8d%e5%8a%a1%e5%af%b9%e6%af%94%ef%bc%882025%e5%b9%b4%e4%b8%93%e5%ae%b6%e6%8e%a8%e8%8d%90%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.zhaozhao123.cn\/wpcms\/post\/1393.html","title":{"rendered":"6\u4e2a\u6700\u4f73\u5ec9\u4ef7VoIP\u7535\u8bdd\u670d\u52a1\u5bf9\u6bd4\uff082025\u5e74\u4e13\u5bb6\u63a8\u8350\uff09"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<h2 class=\"wp-block-heading my-0\">&#20889; Bug&#24037;&#31243;&#24072;&#65306;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<h3>&#36873;&#25321;&#21512;&#36866;&#30340;VoIP&#30005;&#35805;&#26381;&#21153;&#65306;&#19987;&#23478;&#25351;&#21335;<\/h3>\n<p>&#38543;&#30528;&#36828;&#31243;&#24037;&#20316;&#21644;&#22312;&#32447;&#25945;&#32946;&#30340;&#26222;&#21450;&#65292;VoIP&#65288;Voice over Internet Protocol&#65289;&#30005;&#35805;&#26381;&#21153;&#25104;&#20026;&#20102;&#35768;&#22810;&#20225;&#19994;&#21644;&#20010;&#20154;&#30340;&#37325;&#35201;&#36890;&#20449;&#24037;&#20855;&#12290;&#28982;&#32780;&#65292;&#22312;&#20247;&#22810;&#30340;VoIP&#26381;&#21153;&#25552;&#20379;&#21830;&#20013;&#65292;&#22914;&#20309;&#36873;&#25321;&#26368;&#36866;&#21512;&#33258;&#24049;&#30340;&#26381;&#21153;&#21602;&#65311;&#20197;&#19979;&#26159;&#19968;&#20123;&#19987;&#23478;&#25512;&#33616;&#30340;&#26368;&#20339;&#24265;&#20215;VoIP&#30005;&#35805;&#26381;&#21153;&#23545;&#27604;&#12290;<\/p>\n<h4>1. Vonage<\/h4>\n<p><strong>&#31616;&#20171;<\/strong>: Vonage &#26159;&#19968;&#23478;&#30693;&#21517;&#30340;&#32654;&#22269; VoIP &#26381;&#21153;&#25552;&#20379;&#21830;&#65292;&#25552;&#20379;&#22810;&#31181;&#22871;&#39184;&#21644;&#26381;&#21153;&#65292;&#21253;&#25324;&#35821;&#38899;&#12289;&#25968;&#25454;&#21644;&#35270;&#39057;&#36890;&#35805;&#12290;<\/p>\n<p><strong>&#20248;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#20215;&#26684;&#23454;&#24800;<\/strong>&#65306;Vonage &#25552;&#20379;&#22810;&#31181;&#22871;&#39184;&#65292;&#20174;&#22522;&#26412;&#30340;&#20813;&#36153;&#22871;&#39184;&#21040;&#39640;&#32423;&#30340;&#26376;&#36153;&#22871;&#39184;&#12290;<\/li>\n<li><strong>&#20840;&#29699;&#35206;&#30422;<\/strong>&#65306;&#25903;&#25345;&#22269;&#38469;&#28459;&#28216;&#65292;&#36866;&#21512;&#36328;&#22269;&#27807;&#36890;&#38656;&#27714;&#12290;<\/li>\n<li><strong>&#26131;&#29992;&#24615;<\/strong>&#65306;&#30028;&#38754;&#21451;&#22909;&#65292;&#25805;&#20316;&#31616;&#21333;&#12290;<\/li>\n<\/ul>\n<p><strong>&#32570;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#23433;&#20840;&#24615;&#36739;&#20302;<\/strong>&#65306;&#37096;&#20998;&#29992;&#25143;&#25253;&#21578;&#31216;&#20854;&#23433;&#20840;&#25514;&#26045;&#19981;&#22914;&#31454;&#20105;&#23545;&#25163;&#12290;<\/li>\n<\/ul>\n<p><strong>&#31034;&#20363;&#20195;&#30721;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-javascript\">\/\/ &#33719;&#21462;&#20813;&#36153;&#35797;&#29992;&#26399;\nconst vonage = new Vonage('your-api-key', { version: 'v3' });\nvonage.account.createAccount().then(function(data) {\n    console.log('Your account has been created:', data);\n}).catch(function(error) {\n    console.error('Error creating account:', error);\n});<\/code><\/pre>\n<h4>2. RingCentral<\/h4>\n<p><strong>&#31616;&#20171;<\/strong>: RingCentral &#25552;&#20379;&#28789;&#27963;&#30340;&#20225;&#19994;&#32423; VoIP &#35299;&#20915;&#26041;&#26696;&#65292;&#36866;&#29992;&#20110;&#22823;&#20013;&#23567;&#20225;&#19994;&#12290;<\/p>\n<p><strong>&#20248;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#21151;&#33021;&#24378;&#22823;<\/strong>&#65306;&#25552;&#20379;&#20102;&#20016;&#23500;&#30340;&#36890;&#35759;&#24405;&#31649;&#29702;&#12289;&#20250;&#35758;&#31649;&#29702;&#21644;&#33258;&#21160;&#21270;&#27969;&#31243;&#31561;&#21151;&#33021;&#12290;<\/li>\n<li><strong>&#23458;&#25143;&#25903;&#25345;<\/strong>&#65306;&#25317;&#26377;&#24378;&#22823;&#30340;&#23458;&#26381;&#22242;&#38431;&#65292;&#33021;&#24555;&#36895;&#21709;&#24212;&#23458;&#25143;&#38656;&#27714;&#12290;<\/li>\n<\/ul>\n<p><strong>&#32570;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#25104;&#26412;&#36739;&#39640;<\/strong>&#65306;&#30456;&#27604;&#20854;&#20182;&#36873;&#39033;&#65292;&#21021;&#22987;&#25237;&#36164;&#21487;&#33021;&#26356;&#39640;&#12290;<\/li>\n<\/ul>\n<p><strong>&#31034;&#20363;&#20195;&#30721;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-javascript\">\/\/ &#21019;&#24314;&#36134;&#25143;\nconst ringcentral = require('@ringcentral\/js');\nconst options = {\n    server: {\n        url: '<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9wbGF0Zm9ybS5yaW5nY2VudHJhbC5jb20=\" rel=\"noopener noreferrer nofollow\">https:\/\/platform.ringcentral.com<\/a>',\n        port: 443,\n        path: '\/',\n        scheme: 'https'\n    },\n    clientId: 'YOUR_CLIENT_ID',\n    clientSecret: 'YOUR_CLIENT_SECRET',\n    redirectUri: '<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cDovL2xvY2FsaG9zdA==\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost<\/a>8080\/callback.html'\n};\nconst rc = new ringcentral(options);\n\nasync function createAccount() {\n    const response = await rc.login();\n    if (response.success) {\n        console.log('Logged in successfully!');\n    } else {\n        console.error('Login failed:', response.message);\n    }\n}\ncreateAccount();<\/code><\/pre>\n<h4>3. Twilio<\/h4>\n<p><strong>&#31616;&#20171;<\/strong>: Twilio &#25552;&#20379;&#20102;&#20840;&#38754;&#30340;&#20113;&#36890;&#20449;&#35299;&#20915;&#26041;&#26696;&#65292;&#36866;&#29992;&#20110;&#21508;&#31181;&#35268;&#27169;&#30340;&#20225;&#19994;&#12290;<\/p>\n<p><strong>&#20248;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#24191;&#27867;&#20860;&#23481;&#24615;<\/strong>&#65306;&#25903;&#25345;&#22810;&#20010;&#24179;&#21488;&#65292;&#22914;iOS&#12289;Android&#12289;web&#31561;&#12290;<\/li>\n<li><strong>&#38598;&#25104;&#33021;&#21147;&#24378;<\/strong>&#65306;&#21487;&#20197;&#19982;&#29616;&#26377;&#31995;&#32479;&#26080;&#32541;&#38598;&#25104;&#12290;<\/li>\n<\/ul>\n<p><strong>&#32570;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#23450;&#20215;&#22797;&#26434;<\/strong>&#65306;&#36153;&#29992;&#32467;&#26500;&#36739;&#20026;&#22797;&#26434;&#65292;&#38656;&#26681;&#25454;&#23454;&#38469;&#20351;&#29992;&#37327;&#35745;&#31639;&#12290;<\/li>\n<\/ul>\n<p><strong>&#31034;&#20363;&#20195;&#30721;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-javascript\">\/\/ &#21021;&#22987;&#21270;Twilio&#23458;&#25143;&#31471;\nconst Twilio = require('twilio');\n\nconst accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';\nconst authToken = 'yourAuthToken';\nconst twilioClient = new Twilio(accountSid, authToken);\n\nasync function sendSMS(message) {\n    try {\n        const messageResult = await twilioClient.messages.create({\n            body: message,\n            from: '+1234567890',\n            to: '+0987654321'\n        });\n        console.log(`Message sent with SID: ${messageResult.sid}`);\n    } catch (err) {\n        console.error('Error sending SMS:', err);\n    }\n}\n\nsendSMS('Hello from Twilio!');<\/code><\/pre>\n<h4>4. Nexmo<\/h4>\n<p><strong>&#31616;&#20171;<\/strong>: Nexmo &#25552;&#20379;&#31616;&#21333;&#30340; API &#21644; SDK&#65292;&#36866;&#29992;&#20110;&#24320;&#21457;&#20154;&#21592;&#21644;&#20225;&#19994;&#29992;&#25143;&#12290;<\/p>\n<p><strong>&#20248;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#26131;&#20110;&#38598;&#25104;<\/strong>&#65306;API &#31616;&#21333;&#26131;&#29992;&#65292;&#26080;&#38656;&#22797;&#26434;&#30340;&#37197;&#32622;&#12290;<\/li>\n<li><strong>&#25193;&#23637;&#24615;&#24378;<\/strong>&#65306;&#25903;&#25345;&#22810;&#31181;&#25903;&#20184;&#26041;&#24335;&#21644;&#38468;&#21152;&#21151;&#33021;&#12290;<\/li>\n<\/ul>\n<p><strong>&#32570;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#31283;&#23450;&#24615;&#26377;&#26102;&#19981;&#20339;<\/strong>&#65306;&#37096;&#20998;&#29992;&#25143;&#21453;&#26144;&#26381;&#21153;&#19981;&#31283;&#23450;&#12290;<\/li>\n<\/ul>\n<p><strong>&#31034;&#20363;&#20195;&#30721;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-javascript\">\/\/ &#21021;&#22987;&#21270;Nexmo&#23458;&#25143;&#31471;\nconst nexmo = require('nexmo');\n\nconst apikey = 'YOUR_API_KEY';\nconst apisecret = 'YOUR_API_SECRET';\n\nlet client;\nif (nexmo.isWeb()) {\n    \/\/ Web client\n    client = nexmo.client({ apiKey: apikey, apiSecret: apisecret });\n} else {\n    \/\/ Native client\n    client = nexmo.client(apikey, apisecret);\n}\n\nasync function sendMessage(phoneNumber, message) {\n    try {\n        let response;\n        if (nexmo.isWeb()) {\n            response = await client.sendMessage(phoneNumber, message);\n        } else {\n            response = await client.sendSms(phoneNumber, message);\n        }\n\n        console.log(response.body || response.text);\n    } catch (e) {\n        console.error(e.message);\n    }\n}\n\nsendMessage('+1234567890', 'Hello from Nexmo!');<\/code><\/pre>\n<h4>5. Skype<\/h4>\n<p><strong>&#31616;&#20171;<\/strong>: Skype &#26159;&#19968;&#27454;&#24191;&#21463;&#27426;&#36814;&#30340;&#20813;&#36153; VoIP &#26381;&#21153;&#65292;&#20027;&#35201;&#29992;&#20110;&#23478;&#24237;&#21644;&#20010;&#20154;&#36890;&#20449;&#12290;<\/p>\n<p><strong>&#20248;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#20813;&#36153;&#20351;&#29992;<\/strong>&#65306;Skype &#20026;&#22823;&#22810;&#25968;&#29992;&#25143;&#25552;&#20379;&#20813;&#36153;&#26381;&#21153;&#65292;&#20294;&#26377;&#20184;&#36153;&#35745;&#21010;&#25552;&#20379;&#26356;&#22810;&#21151;&#33021;&#12290;<\/li>\n<li><strong>&#22810;&#35821;&#35328;&#25903;&#25345;<\/strong>&#65306;&#25903;&#25345;&#22810;&#31181;&#35821;&#35328;&#12290;<\/li>\n<\/ul>\n<p><strong>&#32570;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#23433;&#20840;&#24615;&#38382;&#39064;<\/strong>&#65306;&#29992;&#25143;&#25253;&#21578;&#31216;&#20854;&#23384;&#22312;&#23433;&#20840;&#28431;&#27934;&#12290;<\/li>\n<\/ul>\n<p><strong>&#31034;&#20363;&#20195;&#30721;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-javascript\">\/\/ &#20351;&#29992;Skype API&#36830;&#25509;\nvar skypemodule = require(\"skype\");\n\nfunction connectToSkype(username) {\n    var skype = new skypemodule.Skype(username);\n    return new Promise((resolve, reject) =&gt; {\n        skype.connect((error) =&gt; {\n            if (!error) {\n                resolve(skyke);\n            } else {\n                reject(error);\n            }\n        });\n    });\n}\n\nconnectToSkype('myusername').then(skype =&gt; {\n    console.log('Connected to Skype:', skype);\n}).catch(err =&gt; {\n    console.error('Connection failed:', err);\n});<\/code><\/pre>\n<h4>6. Google Voice<\/h4>\n<p><strong>&#31616;&#20171;<\/strong>: Google Voice &#25552;&#20379;&#22522;&#20110;&#20114;&#32852;&#32593;&#30340;&#30005;&#35805;&#26381;&#21153;&#65292;&#26041;&#20415;&#29992;&#25143;&#25320;&#25171;&#21644;&#25509;&#21548;&#30005;&#35805;&#12290;<\/p>\n<p><strong>&#20248;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#31616;&#21333;&#26131;&#29992;<\/strong>&#65306;&#29992;&#25143;&#30028;&#38754;&#31616;&#27905;&#65292;&#25805;&#20316;&#31616;&#21333;&#12290;<\/li>\n<li><strong>&#23454;&#26102;&#36319;&#36394;<\/strong>&#65306;&#25903;&#25345;&#23454;&#26102;&#30005;&#35805;&#36319;&#36394;&#12290;<\/li>\n<\/ul>\n<p><strong>&#32570;&#28857;<\/strong>:<\/p>\n<ul>\n<li><strong>&#38544;&#31169;&#38382;&#39064;<\/strong>&#65306;Google &#38656;&#35201;&#25910;&#38598;&#29992;&#25143;&#30340;&#36890;&#35805;&#20449;&#24687;&#26469;&#25552;&#20379;&#26381;&#21153;&#12290;<\/li>\n<\/ul>\n<p><strong>&#31034;&#20363;&#20195;&#30721;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-javascript\">\/\/ &#21021;&#22987;&#21270;Google Voice&#23458;&#25143;&#31471;\nvar googlevoice = require('googlevoice');\n\nfunction loginAndCall(destinationPhone) {\n    googlevoice.login()\n        .then(googlevoice =&gt; {\n            googlevoice.call(destinationPhone)\n                .then(call =&gt; {\n                    console.log('Called:', call);\n                })\n                .catch(err =&gt; {\n                    console.error('Call failed:', err);\n                });\n        })\n        .catch(err =&gt; {\n            console.error('Login failed:', err);\n        });\n}\n\nloginAndCall('+1234567890');<\/code><\/pre>\n<p>&#36890;&#36807;&#19978;&#36848;&#23545;&#27604;&#65292;&#24744;&#21487;&#20197;&#26681;&#25454;&#33258;&#24049;&#30340;&#38656;&#27714;&#36873;&#25321;&#26368;&#21512;&#36866;&#30340;VoIP&#30005;&#35805;&#26381;&#21153;&#12290;&#27599;&#20010;&#26381;&#21153;&#37117;&#26377;&#20854;&#29420;&#29305;&#30340;&#20248;&#21183;&#21644;&#21155;&#21183;&#65292;&#36873;&#25321;&#26102;&#35831;&#21153;&#24517;&#32771;&#34385;&#39044;&#31639;&#12289;&#21151;&#33021;&#38656;&#27714;&#20197;&#21450;&#23545;&#26381;&#21153;&#31283;&#23450;&#24615;&#30340;&#26399;&#26395;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<h2 class=\"wp-block-heading my-0\">&#40657;&#26495;IDE&#25945;&#20070;&#21280;&#65306;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;&#32534;&#20889;&#19968;&#20221;&#20851;&#20110;6&#20010;&#26368;&#20339;&#24265;&#20215;VoIP&#30005;&#35805;&#26381;&#21153;&#30340;&#27604;&#36739;&#21644;&#20998;&#26512;&#30340;&#25945;&#26696;&#26102;&#65292;&#25105;&#20204;&#38656;&#35201;&#39318;&#20808;&#26126;&#30830;VoIP&#65288;Voice over Internet Protocol&#65289;&#26159;&#19968;&#31181;&#20351;&#29992;&#20114;&#32852;&#32593;&#36830;&#25509;&#32780;&#19981;&#26159;&#20256;&#32479;&#30005;&#35805;&#32447;&#36335;&#26469;&#20256;&#36755;&#35821;&#38899;&#36890;&#20449;&#30340;&#25216;&#26415;&#12290;VoIP&#30005;&#35805;&#26381;&#21153;&#20801;&#35768;&#29992;&#25143;&#36890;&#36807;&#20114;&#32852;&#32593;&#36830;&#25509;&#19982;&#20854;&#20182;&#29992;&#25143;&#36890;&#35805;&#65292;&#32780;&#26080;&#38656;&#20256;&#32479;&#30340;&#30005;&#35805;&#32447;&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#38024;&#23545;VoIP&#30005;&#35805;&#26381;&#21153;&#30340;&#19968;&#20123;&#20851;&#38190;&#28857;&#65306;<\/p>\n<ol>\n<li><strong>&#20215;&#26684;<\/strong>&#65306;&#24265;&#20215;VoIP&#30005;&#35805;&#26381;&#21153;&#36890;&#24120;&#20855;&#26377;&#36739;&#20302;&#30340;&#20215;&#26684;&#65292;&#22240;&#20026;&#23427;&#20204;&#19981;&#20381;&#36182;&#20110;&#26114;&#36149;&#30340;&#30828;&#20214;&#35774;&#22791;&#25110;&#30005;&#20449;&#36816;&#33829;&#21830;&#12290;<\/li>\n<li><strong>&#21151;&#33021;<\/strong>&#65306;&#23613;&#31649;&#20215;&#26684;&#21487;&#33021;&#26356;&#20415;&#23452;&#65292;&#20294;&#19968;&#20123;VoIP&#26381;&#21153;&#20173;&#28982;&#25552;&#20379;&#20016;&#23500;&#30340;&#21151;&#33021;&#65292;&#21253;&#25324;&#39640;&#28165;&#35270;&#39057;&#36890;&#35805;&#12289;&#20250;&#35758;&#21628;&#21483;&#31561;&#39640;&#32423;&#29305;&#24615;&#12290;<\/li>\n<li><strong>&#20860;&#23481;&#24615;<\/strong>&#65306;&#35768;&#22810;VoIP&#26381;&#21153;&#19982;&#21508;&#31181;&#35774;&#22791;&#20860;&#23481;&#65292;&#22914;&#30005;&#33041;&#12289;&#25163;&#26426;&#21644;&#24179;&#26495;&#30005;&#33041;&#65292;&#22240;&#27492;&#21487;&#20197;&#22312;&#22810;&#31181;&#35774;&#22791;&#19978;&#20351;&#29992;&#12290;<\/li>\n<li><strong>&#31283;&#23450;&#24615;<\/strong>&#65306;&#34429;&#28982;&#20215;&#26684;&#20302;&#65292;&#20294;&#31283;&#23450;&#30340;&#32593;&#32476;&#29615;&#22659;&#23545;&#20110;&#39640;&#36136;&#37327;&#30340;VoIP&#36890;&#35805;&#33267;&#20851;&#37325;&#35201;&#12290;<\/li>\n<\/ol>\n<p>&#29616;&#22312;&#35753;&#25105;&#20204;&#20197;&#20960;&#20010;&#20855;&#20307;&#30340;&#23454;&#20363;&#20195;&#30721;&#23637;&#31034;&#22914;&#20309;&#23454;&#29616;&#19968;&#20010;&#31616;&#21333;&#30340;VoIP&#30005;&#35805;&#24212;&#29992;&#65306;<\/p>\n<h3>1. &#20351;&#29992;Python&#23454;&#29616;VoIP&#30005;&#35805;<\/h3>\n<h4>&#31034;&#20363;&#20195;&#30721;&#65306;<\/h4>\n<pre><code class=\"language-python\">import pyaudio\nfrom _thread import *\nimport time\n\nCHUNK = 1024\nFORMAT = pyaudio.paInt16\nCHANNELS = 1\nRATE = 44100\nRECORD_SECONDS = 5\nWAVE_OUTPUT_FILENAME = \"output.wav\"\n\ndef record():\n    p = pyaudio.PyAudio()\n    stream = p.open(format=FORMAT,\n                    channels=CHANNELS,\n                    rate=RATE,\n                    input=True,\n                    frames_per_buffer=CHUNK)\n\n    print(\"recording\")\n    data = []\n    for i in range(0, int(RATE \/ CHUNK * RECORD_SECONDS)):\n        data.append(stream.read(CHUNK))\n    print(\"finished recording\")\n    stream.stop_stream()\n    stream.close()\n    p.terminate()\n\n    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')\n    wf.setnchannels(CHANNELS)\n    wf.setsampwidth(p.get_sample_size(FORMAT))\n    wf.setframerate(RATE)\n    wf.writeframes(b''.join(data))\n    wf.close()\n\nstart_new_thread(record, ())\ntime.sleep(2)<\/code><\/pre>\n<h3>2. &#20351;&#29992;Node.js&#23454;&#29616;VoIP&#30005;&#35805;<\/h3>\n<h4>&#31034;&#20363;&#20195;&#30721;&#65306;<\/h4>\n<pre><code class=\"language-javascript\">const WebSocket = require('ws');\nconst wss = new WebSocket.Server({ port: 8080 });\n\nwss.on('connection', (ws) =&gt; {\n  ws.send(JSON.stringify({\n    type: 'client',\n    message: 'Hello from server!'\n  }));\n});\n\nws.on('message', (message) =&gt; {\n  console.log(`Received: ${message}`);\n});<\/code><\/pre>\n<h3>3. &#20351;&#29992;Java&#23454;&#29616;VoIP&#30005;&#35805;<\/h3>\n<h4>&#31034;&#20363;&#20195;&#30721;&#65306;<\/h4>\n<pre><code class=\"language-java\">import java.net.InetAddress;\nimport java.net.UnknownHostException;\n\npublic class VoipPhone {\n\n    public static void main(String[] args) throws UnknownHostException {\n        String ip = InetAddress.getLocalHost().getHostAddress();\n        System.out.println(ip);\n\n        \/\/ VoIP&#30005;&#35805;&#23458;&#25143;&#31471;&#20195;&#30721;\n        \/\/ ...\n    }\n}<\/code><\/pre>\n<p>&#36825;&#20123;&#20195;&#30721;&#29255;&#27573;&#23637;&#31034;&#20102;&#22914;&#20309;&#21019;&#24314;&#19968;&#20010;&#22522;&#26412;&#30340;VoIP&#30005;&#35805;&#24212;&#29992;&#31243;&#24207;&#65292;&#23427;&#20204;&#20998;&#21035;&#36866;&#29992;&#20110;&#19981;&#21516;&#30340;&#32534;&#31243;&#35821;&#35328;&#21644;&#24179;&#21488;&#12290;&#36890;&#36807;&#19978;&#36848;&#20195;&#30721;&#65292;&#25105;&#20204;&#21487;&#20197;&#30475;&#21040;&#65292;&#21363;&#20351;&#26159;&#22312;&#25104;&#26412;&#36739;&#20302;&#30340;&#24773;&#20917;&#19979;&#65292;&#20063;&#21487;&#20197;&#26500;&#24314;&#20986;&#33021;&#22815;&#28385;&#36275;&#22522;&#26412;&#38656;&#27714;&#30340;VoIP&#30005;&#35805;&#24212;&#29992;&#12290;<\/p>\n<p>&#22312;&#23454;&#38469;&#25805;&#20316;&#36807;&#31243;&#20013;&#65292;&#35831;&#26681;&#25454;&#24744;&#25152;&#22312;&#22320;&#21306;&#30340;&#32593;&#32476;&#29615;&#22659;&#36873;&#25321;&#21512;&#36866;&#30340;VoIP&#26381;&#21153;&#25552;&#20379;&#21830;&#65292;&#24182;&#30830;&#20445;&#24744;&#30340;&#35774;&#22791;&#25903;&#25345;&#30456;&#24212;&#30340;&#21327;&#35758;&#21644;&#36719;&#20214;&#39537;&#21160;&#12290;&#21516;&#26102;&#65292;&#23433;&#20840;&#24615;&#21644;&#38544;&#31169;&#20445;&#25252;&#21516;&#26679;&#37325;&#35201;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#25935;&#24863;&#20449;&#24687;&#26102;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&#20889; Bug&#24037;&#31243;&#24072;&#65306; &#36873;&#25321;&#21512;&#36866;&#30340;VoIP&#30005;&#35805;&#26381;&#21153;&#65306;&#19987;&#23478;&#25351;&#038;#21335..<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[51],"tuisongtax":[],"class_list":["post-1393","post","type-post","status-publish","format-standard","hentry","category-wpdt","tag-jzgj"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/posts\/1393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/comments?post=1393"}],"version-history":[{"count":0,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/posts\/1393\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/media?parent=1393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/categories?post=1393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/tags?post=1393"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/tuisongtax?post=1393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}