SSL/TLSサポートを備えたAndroid、iOS、およびMacOのネイティブTCPソケットAPIを反応します。 TCPクライアントとサーバーのソケットを作成し、ノードのネットおよびノードのTLS API関数を模倣することができます(利用可能なAPIを確認してください)。
nettlsのオーバーライドいずれかの糸を使用してライブラリをインストールします。
yarn add react-native-tcp-socket
またはNPM:
npm install --save react-native-tcp-socket
net react-native-tcp-socket Nodeのネットと同じAPIを提供しているため、このモジュールをnetまたは使用require('net')としてインポートする場合は、JavaScriptで次の行をpackage.jsonファイルに追加する必要があります。
{
"react-native" : {
"net" : " react-native-tcp-socket "
}
}さらに、このモジュールで提供されるTSタイプ(または自動施設)を取得するには、カスタム宣言ファイルにも次のことを追加する必要があります。
...
declare module 'net' {
import TcpSockets from 'react-native-tcp-socket' ;
export = TcpSockets ;
}複製されたnetタイプを避けたい場合は、 tsconfig.json "typeRoots"プロパティでデフォルトのnode_modules/@typesを使用しないようにしてください。
実用的な例については、提供されているアプリのサンプルを確認してください。
tlsのオーバーライド同じことがtlsモジュールにも当てはまります。ただし、以下に注意する必要があります。
Serverクラスは非TLSです。 TLSサーバーを使用するには、 TLSServerクラスを使用する必要があります。デフォルトのServerクラス( tls.Server = tls.TLSServer )をオーバーライドできます。同じことがcreateServer()とconnect()にも当てはまります。 TLSメソッドを使用するには、それぞれcreateTLSServer()およびconnectTLS()メソッドを使用する必要があります。デフォルトのメソッド( tls.createServer = tls.createTLSServerおよびtls.connect = tls.connectTLS )をオーバーライドできます。tlsモジュールでは、キーと証明書を文字列として提供する必要があります。ただし、 react-native-tcp-socketモジュールでは、 require()でインポートする必要があります。さらに、このモジュールで提供されるTSタイプ(または自動施設)を取得するには、カスタム宣言ファイルにも次のことを追加する必要があります。
...
declare module 'tls' {
import TcpSockets from 'react-native-tcp-socket' ;
export const Server = TcpSockets . TLSServer ;
export const TLSSocket = TcpSockets . TLSSocket ;
export const connect = TcpSockets . connectTLS ;
export const createServer = TcpSockets . createTLSServer ;
}実用的な例については、提供されているアプリのサンプルを確認してください。
パッケージを手動でリンクするには、自動リンクには必要ありません。
iOSプラットフォーム:
$ cd ios && pod install && cd .. #iOSのcocoapodsにはこの追加のステップが必要です
Androidプラットフォーム:
android/build.gradle構成を変更して、 minSdkVersion = 21に一致します。
buildscript {
ext {
...
minSdkVersion = 21
...
}
自己署名SSLに必要なファイル(キーと証明書)を生成するには、次のコマンドを使用できます。
openssl genrsa -out server-key.pem 4096
openssl req -new -key server-key.pem -out server-csr.pem
openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem
openssl pkcs12 -export -out server-keystore.p12 -inkey server-key.pem -in server-cert.pem
注: server-keystore.p12パスワードを持っていてはなりません。
自己署名SSL証明書を使用するには、Metro.Config.jsファイルが必要です。ルートプロジェクトディレクトリにこのファイルを既に持っている必要がありますが、そうでない場合は作成してください。 module.exportsオブジェクト内で、 assetExtsという別のオブジェクトを使用してresolverと呼ばれるキーを作成します。 assetExtsの値は、サポートするリソースファイル拡張機能の配列である必要があります。
.pemおよび.p12ファイル(さらにサポートされているすべてのファイル)を使用できるようにしたい場合、 metro.config.jsは次のようになります。
const { getDefaultConfig } = require ( 'metro-config' ) ;
const defaultConfig = getDefaultConfig . getDefaultValues ( __dirname ) ;
module . exports = {
resolver : {
assetExts : [ ... defaultConfig . resolver . assetExts , 'pem' , 'p12' ] ,
} ,
// ...
} ; 次に、使用しているプラットフォームにライブラリのネイティブ部分をリンクする必要があります。ライブラリをリンクする最も簡単な方法は、プロジェクトのルートからこのコマンドを実行してCLIツールを使用することです。
$ react-native link react-native-tcp-socket
CLIツールを使用できない、または使用したくない場合は、以下の手順を使用してライブラリを手動でリンクすることもできます(矢印をクリックして表示します):
Libraries Add Files to [your project's name]node_modules react-native-tcp-socketに移動し、 TcpSockets.xcodeprojを追加しますBuild PhasesにlibTcpSockets.aを追加するLink Binary With LibrariesCmd+R )<を実行しますandroid/app/src/main/java/[...]/MainApplication.javaを開きますimport com.asterinet.react.tcpsocket.TcpSocketPackage;ファイルの上部にあるインポートにgetPackages()メソッドによって返されたリストにnew TcpSocketPackage()を追加しますandroid/settings.gradleに追加します。 include ':react-native-tcp-socket'
project(':react-native-tcp-socket').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-tcp-socket/android')
android/app/build.gradleの依存関係ブロック内に次の行を挿入します: implementation project(':react-native-tcp-socket')
このライブラリを使用するには、Reactネイティブの正しいバージョンを使用していることを確認する必要があります。 0.60未満のReactネイティブのバージョンを使用している場合は、最新バージョンを使用する前にアップグレードする必要があります。
react-native-tcp-socketバージョン | 必要なReact Nativeバージョン |
|---|---|
6.XX 、 5.XX 、 4.XX 、 3.XX | >= 0.60.0 |
1.4.0 | >= Unknown |
ライブラリをインポートします:
import TcpSocket from 'react-native-tcp-socket' ;
// const net = require('react-native-tcp-socket');
// const tls = require('react-native-tcp-socket'); const options = {
port : port ,
host : '127.0.0.1' ,
localAddress : '127.0.0.1' ,
reuseAddress : true ,
// localPort: 20000,
// interface: "wifi",
} ;
// Create socket
const client = TcpSocket . createConnection ( options , ( ) => {
// Write on the socket
client . write ( 'Hello server!' ) ;
// Close socket
client . destroy ( ) ;
} ) ;
client . on ( 'data' , function ( data ) {
console . log ( 'message was received' , data ) ;
} ) ;
client . on ( 'error' , function ( error ) {
console . log ( error ) ;
} ) ;
client . on ( 'close' , function ( ) {
console . log ( 'Connection closed!' ) ;
} ) ; const server = TcpSocket . createServer ( function ( socket ) {
socket . on ( 'data' , ( data ) => {
socket . write ( 'Echo server ' + data ) ;
} ) ;
socket . on ( 'error' , ( error ) => {
console . log ( 'An error ocurred with client socket ' , error ) ;
} ) ;
socket . on ( 'close' , ( error ) => {
console . log ( 'Closed connection with ' , socket . address ( ) ) ;
} ) ;
} ) . listen ( { port : 12345 , host : '0.0.0.0' } ) ;
server . on ( 'error' , ( error ) => {
console . log ( 'An error ocurred with the server' , error ) ;
} ) ;
server . on ( 'close' , ( ) => {
console . log ( 'Server closed connection' ) ;
} ) ; const options = {
port : port ,
host : '127.0.0.1' ,
localAddress : '127.0.0.1' ,
reuseAddress : true ,
// localPort: 20000,
// interface: "wifi",
ca : require ( 'server-cert.pem' ) ,
} ;
// Create socket
const client = TcpSocket . connectTLS ( options , ( ) => {
// Write on the socket
client . write ( 'Hello server!' ) ;
// Close socket
client . destroy ( ) ;
} ) ;
client . on ( 'data' , function ( data ) {
console . log ( 'message was received' , data ) ;
} ) ;
client . on ( 'error' , function ( error ) {
console . log ( error ) ;
} ) ;
client . on ( 'close' , function ( ) {
console . log ( 'Connection closed!' ) ;
} ) ; const options = {
keystore : require ( 'server-keystore.p12' ) ,
} ;
const server = TcpSocket . createTLSServer ( options , function ( socket ) {
socket . on ( 'data' , ( data ) => {
socket . write ( 'Echo server ' + data ) ;
} ) ;
socket . on ( 'error' , ( error ) => {
console . log ( 'An error ocurred with SSL client socket ' , error ) ;
} ) ;
socket . on ( 'close' , ( error ) => {
console . log ( 'SSL closed connection with ' , socket . address ( ) ) ;
} ) ;
} ) . listen ( { port : 12345 , host : '0.0.0.0' } ) ;
server . on ( 'error' , ( error ) => {
console . log ( 'An error ocurred with the server' , error ) ;
} ) ;
server . on ( 'close' , ( ) => {
console . log ( 'Server closed connection' ) ;
} ) ;注:自己署名証明書を使用するには、Metro.config.js構成を必ず更新してください。
NodeのネットAPIを模倣するreact-native-tcp-socketに実装されたすべてのメソッドがリストされています。その機能は、Nodeのネットで提供される機能と同等です(#41の詳細)。ただし、インターフェイスがノードとは異なる方法は、太字でマークされています。
net.connect(options[, callback])net.createConnection(options[, callback])net.createServer(connectionListener)net.isIP(input)net.isIPv4(input)net.isIPv6(input)address()destroy([error])end([data][, encoding][, callback])setEncoding([encoding])setKeepAlive([enable][, initialDelay]) - initialDelay無視されますsetNoDelay([noDelay])setTimeout(timeout[, callback])write(data[, encoding][, callback])pause()ref() -効果はありませんresume()unref() -効果はありませんStream.Writableから継承:writableNeedDrainbytesReadbytesWrittenconnectingdestroyedlocalAddresslocalPortremoteAddressremoteFamilyremotePortpendingtimeoutreadyStateStream.Readableから継承:'pause''resume''close''connect''data''drain''error''timeout'net.createConnection() net.createConnection(options[, callback])指定されたoptionsを使用してTCP接続を作成します。 optionsパラメーターは、次のプロパティを持つobjectである必要があります。
| 財産 | タイプ | iOS/macOS | アンドロイド | 説明 |
|---|---|---|---|---|
port | <number> | 必須。ポートソケットは接続する必要があります。 | ||
host | <string> | ホストソケットは接続する必要があります。 IPv4形式または'localhost'のIPアドレス。デフォルト: 'localhost' 。 | ||
localAddress | <string> | ローカルアドレスソケットは接続する必要があります。指定されていない場合、OSは決定します。過負荷エラーを防ぎ、パフォーマンスを改善するために、 localAddressを指定することを強くお勧めします。 | ||
localPort | <number> | ローカルポートソケットは接続する必要があります。指定されていない場合、OSは決定します。 | ||
interface | <string> | インターフェイスソケットはから接続する必要があります。指定されていない場合、現在のアクティブ接続を使用します。オプションは、 'wifi', 'ethernet', 'cellular'です。 | ||
reuseAddress | <boolean> | ReuseAddressソケットオプションを有効/無効にします。デフォルト: true 。 |
注:デフォルト値を使用するとマークされたプラットフォーム。
address()listen(options[, callback])close([callback])getConnections(callback)listening'close''connection''error''listening'Server.listen() Server.listen(options[, callback])指定されたoptionsを使用してTCPサーバーソケットを作成します。 optionsパラメーターは、次のプロパティを持つobjectである必要があります。
| 財産 | タイプ | iOS/macOS | アンドロイド | 説明 |
|---|---|---|---|---|
port | <number> | 必須。ポートソケットは聴く必要があります。 | ||
host | <string> | ホストソケットは聴く必要があります。 IPv4形式または'localhost'のIPアドレス。デフォルト: '0.0.0.0' 。 | ||
reuseAddress | <boolean> | ReuseAddressソケットオプションを有効/無効にします。デフォルト: true 。 |
注:デフォルト値を使用するとマークされたプラットフォーム。
NodeのTLS APIを模倣するreact-native-tcp-socketに実装されたすべてのメソッドがリストされています。その機能は、NodeのTLSによって提供される機能と同等です。ただし、インターフェイスがノードとは異なる方法は、太字でマークされています。
tls.connectTLS(options[, callback])tls.createTLSServer([options][, secureConnectionListener])SocketからのすべてのメソッドgetCertificate() AndroidのみgetPeerCertificate() AndroidのみSocketからのすべてのプロパティSocketからのすべてのイベント'secureConnect'tls.connectTLS() tls.connectTLS(options[, callback])指定されたoptionsを使用してTLSソケット接続を作成します。 optionsパラメーターは、次のプロパティを持つobjectである必要があります。
| 財産 | タイプ | iOS/macOS | アンドロイド | 説明 |
|---|---|---|---|---|
ca | <import> | CAファイル(.PEM形式)を信頼します。 nullの場合、デバイスのデフォルトのSSL信頼リストを使用します。自己署名証明書に役立ちます。そのようなファイルを生成するためにドキュメントを確認してください。デフォルト: null 。 | ||
key | <import> | 秘密キーファイル(.pem形式)。そのようなファイルを生成するためにドキュメントを確認してください。 | ||
cert | <import> | パブリック証明書ファイル(.pem形式)。そのようなファイルを生成するためにドキュメントを確認してください。 | ||
androidKeyStore | <string> | Android Keystoreエイリアス。 | ||
certAlias | <string> | Android Keystore証明書エイリアス。 | ||
keyAlias | <string> | Android Keystoreの秘密キーエイリアス。 | ||
... | <any> | 他のsocket.connect()オプションはまだリストされていません。 |
注:TLSサーバーはノードのTLSでServerと呼ばれますが、 Serverクラスとの混乱を避けるためにreact-native-tcp-socketのTLSServerと名付けられています。
ServerからのすべてのメソッドsetSecureContext(options)ServerからのすべてのプロパティServerからのすべてのイベント'secureConnection'tls.createTLSServer() tls.createTLSServer([options][, secureConnectionListener])新しいtls.TLSServerを作成します。 secureConnectionListenerは、提供されている場合、 'secureConnection'イベントのリスナーとして自動的に設定されます。 optionsパラメーターは、次のプロパティを持つobjectである必要があります。
| 財産 | タイプ | iOS/macOS | アンドロイド | 説明 |
|---|---|---|---|---|
keystore | <import> | 必須。サーバー証明書と秘密鍵を備えたPKCS#12形式のキーストア。そのようなファイルを生成するためにドキュメントを確認してください。 |
ライブラリはMITライセンスの下でリリースされます。詳細については、 LICENSE参照してください。