NSStreamEventHasBytesAvailableを呼び出すことができません

ゴーサム

Python(Twisted)でサーバーを作成しました。サーバーに接続してサーバーにデータを送信しましたが、サーバーからデータを取得できず、NSStreamEventHasBytesAvailableが呼び出されません。

これが私がサーバーに接続する方法です:

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 3000, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];

ここに問題があります:

-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
{
     NSString *event;
     switch (streamEvent)
     {
         case NSStreamEventHasBytesAvailable:
         event = @"NSStreamEventHasBytesAvailable";
         if (theStream == inputStream)
         {
             uint8_t buffer[1024];
             int len;
             while ([inputStream hasBytesAvailable])
             {
                NSLog(@"input =====%@",inputStream);

                len = [inputStream read:buffer maxLength:1024];
                NSLog(@"len -=======%d",len);
                if (len > 0)
                {
                    NSMutableString *output = [[NSMutableString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
                    NSLog(@"Received data--------------------%@", output);
                }
             }
        }
        break;
    }
}

これはサーバー側のコードです。

from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor

class IphoneChat(Protocol):
    def connectionMade(self):
        self.factory.clients.append(self)
        print "clients are ", self.factory.clients

    def connectionLost(self, reason):
        self.factory.clients.remove(self)

    def dataReceived(self, data):
        a = data.split(':')
        print a
        if len(a) > 1:
           command = a[0]
           content = a[1]

           msg = ""
           if command == "msg":
               msg = content
               print msg

    def message(self, message):
        self.transport.write(message + '\n')

        for c in self.factory.clients:
            c.message(msg)

factory = Factory()
factory.protocol = IphoneChat
factory.clients = []
reactor.listenTCP(650, factory)
print "Iphone Chat server started"
reactor.run()

私はたくさん試し、グーグルで検索しましたが、解決策が見つかりませんでした。それは私の時間を殺しているので、誰かがそれに取り組んだことがあれば、私を導き、サンプルコードを投稿してください。前もって感謝します。

ersran9

iPhoneについては何も知りませんが、サーバーに問題があることがわかりました。私はむしろそれを次のように書きたい

from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor

class IphoneChat(Protocol):
    def connectionMade(self):
        self.factory.clients.append(self)
        print "clients are ", self.factory.clients

    def connectionLost(self, reason):
        self.factory.clients.remove(self)

    def dataReceived(self, data):
        a = data.split(':')
        print a
        if len(a) > 1:
           command = a[0]
           content = a[1]

           msg = ""
           if command == "msg":
               msg = content
               self.message(msg)
               print msg

    def message(self, message):
        for c in self.factory.clients:
            c.transport.write(message + '\n')

factory = Factory()
factory.protocol = IphoneChat
factory.clients = []
reactor.listenTCP(650, factory)
print "Iphone Chat server started"
reactor.run()

telnetクライアントでテストしたところ、うまくいきました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ajaxとphpを呼び出すことができません

分類Dev

AnkoでStartActivityForResultを呼び出すことができません

分類Dev

SpringCloudでRestEndpointを呼び出すことができません

分類Dev

AngularでAPIを呼び出すことができません

分類Dev

CustomListAdapterでnotifyDataSetChangedを呼び出すことができません

分類Dev

jqueryajaxを呼び出すことができません

分類Dev

モデルを呼び出すことができません

分類Dev

ExoplayerはseekTo()を呼び出すことができません

分類Dev

CFDictionaryGetValueはCFStringRefで呼び出すことができません

分類Dev

解析で「findObjectsInBackground」をすばやく呼び出すことができません

分類Dev

手動で呼び出さないと、関数の1つを呼び出すことができません

分類Dev

Int配列は呼び出すことができません

分類Dev

AJAX呼び出しを行うことができません

分類Dev

angularjsでObject.keysを呼び出すことができません

分類Dev

PHPエコーでjQueryを呼び出すことができません

分類Dev

typescriptのconstructor()内でsuper()を呼び出すことができません

分類Dev

AmazonConnectのContactFlowでAWSLambda関数を呼び出すことができません

分類Dev

codeigniterで関数を呼び出すことができません

分類Dev

AppCompatActivityでgetLifecycle()メソッドを呼び出すことができません

分類Dev

hyperledger-fabricnode-sdkで「queryInstalledChaincodes」を呼び出すことができません

分類Dev

SpringRestControllerでRESTサービスを呼び出すことができません

分類Dev

( `String`、` Array <String> `)で` ++ `を呼び出すことができません

分類Dev

strategy.exitで `when`条件を呼び出すことができません

分類Dev

C ++ vector <pair <>>でerase()操作を呼び出すことができません

分類Dev

RN.createPublicClientApplicationを呼び出すことができませんでした

分類Dev

シェルでexpectを呼び出すことができません

分類Dev

OnCommand関数でImagebuttonを呼び出すことができません

分類Dev

httpClientGET呼び出しで値を返すことができません

分類Dev

collectionView(collectionView:collectionViewLayout:sizeForItemAtIndexPath)内でdequeueReusableCellWithReuseIdentifierを呼び出すことができません

Related 関連記事

  1. 1

    ajaxとphpを呼び出すことができません

  2. 2

    AnkoでStartActivityForResultを呼び出すことができません

  3. 3

    SpringCloudでRestEndpointを呼び出すことができません

  4. 4

    AngularでAPIを呼び出すことができません

  5. 5

    CustomListAdapterでnotifyDataSetChangedを呼び出すことができません

  6. 6

    jqueryajaxを呼び出すことができません

  7. 7

    モデルを呼び出すことができません

  8. 8

    ExoplayerはseekTo()を呼び出すことができません

  9. 9

    CFDictionaryGetValueはCFStringRefで呼び出すことができません

  10. 10

    解析で「findObjectsInBackground」をすばやく呼び出すことができません

  11. 11

    手動で呼び出さないと、関数の1つを呼び出すことができません

  12. 12

    Int配列は呼び出すことができません

  13. 13

    AJAX呼び出しを行うことができません

  14. 14

    angularjsでObject.keysを呼び出すことができません

  15. 15

    PHPエコーでjQueryを呼び出すことができません

  16. 16

    typescriptのconstructor()内でsuper()を呼び出すことができません

  17. 17

    AmazonConnectのContactFlowでAWSLambda関数を呼び出すことができません

  18. 18

    codeigniterで関数を呼び出すことができません

  19. 19

    AppCompatActivityでgetLifecycle()メソッドを呼び出すことができません

  20. 20

    hyperledger-fabricnode-sdkで「queryInstalledChaincodes」を呼び出すことができません

  21. 21

    SpringRestControllerでRESTサービスを呼び出すことができません

  22. 22

    ( `String`、` Array <String> `)で` ++ `を呼び出すことができません

  23. 23

    strategy.exitで `when`条件を呼び出すことができません

  24. 24

    C ++ vector <pair <>>でerase()操作を呼び出すことができません

  25. 25

    RN.createPublicClientApplicationを呼び出すことができませんでした

  26. 26

    シェルでexpectを呼び出すことができません

  27. 27

    OnCommand関数でImagebuttonを呼び出すことができません

  28. 28

    httpClientGET呼び出しで値を返すことができません

  29. 29

    collectionView(collectionView:collectionViewLayout:sizeForItemAtIndexPath)内でdequeueReusableCellWithReuseIdentifierを呼び出すことができません

ホットタグ

アーカイブ