SSL/TLS 지원이 있는 Android, iOS 및 MacOS 용 원시 TCP 소켓 API를 반응합니다. TCP 클라이언트 및 서버 소켓을 만들어 노드의 NET 및 NODE의 TLS API 기능을 모방 할 수 있습니다 (자세한 내용은 사용 가능한 API를 확인하십시오).
nettls 의 우선원사를 사용하여 라이브러리를 설치하십시오.
yarn add react-native-tcp-socket
또는 NPM :
npm install --save react-native-tcp-socket
net react-native-tcp-socket Node의 NET과 동일한 API를 제공하므로 JavaScript에서 net 또는 사용 require('net') 로이 모듈을 가져 오려면 다음 줄을 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 클래스는 TL이 아닌 것입니다. 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는이 추가 단계가 필요합니다.
안드로이드 플랫폼 :
minSdkVersion = 21 일치하도록 android/build.gradle 구성을 수정하십시오.
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 Native를 사용해야합니다. 0.60 보다 낮은 React Native 버전을 사용하는 경우 최신 버전을 사용하기 전에 업그레이드해야합니다.
react-native-tcp-socket 버전 | 필요한 반응 기본 버전 |
|---|---|
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의 NET API를 모방하는 react-native-tcp-socket 에 구현 된 모든 방법으로, 그 기능은 Node의 NET에서 제공하는 기능과 동일합니다 ( #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() 안드로이드 전용getPeerCertificate() 안드로이드 만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 Private Key Alias. | ||
... | <any> | 다른 socket.connect() 옵션은 아직 나열되지 않았습니다. |
참고 : TLS 서버는 Node의 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 참조하십시오.