- ベストアンサー
C++のWinsockでサーバーを立てて、 Javaで接続してデータを
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
このあたりを参考に。
関連するQ&A
- winsock のrecvデータの終わりを知るには
Winsockの非同期プログラムで サーバーからクライアントへ,100MB前後のデータを送るプログラムを書いています. サーバーでsend()して,クライアントのcase FD_READ のイベント応答としてrecv()を繰り返すプログラムです. サイズが大きいので何度もrecev()して,データを結合していくことになりますが, 送信データの最後を知るエレガントな方法がないかと思っています. すべてが送り終わったら空send()をして,ゼロサイズのデータを送ることができればよいのですが. よろしくお願いします.
- ベストアンサー
- C・C++・C#
- Winsockについて
OS :WindowsXP 開発言語 :VC++ Winsock :2.2 現在、Winsockプログラムにて下記のようなテストをしています。 接続 ⇒ データ送信(正常) ⇒ LANケーブル抜く ⇒ データ送信(当然エラー) ⇒ LANケーブル挿す ⇒ データ送信 ・・・ ←ここでもエラーが発生してしまいます。 Winsockの通信は一度切れてしまうと最初から接続しなおさないと駄目なのでしょうか。
- ベストアンサー
- C・C++・C#
- Winsock 受信について
Winsockをサーバとクライアントで動かして送受信についてです。 サーバでSendDataで送信、クライアントでGetDataの所です。 サーバーでSendDataを数回送信するとクライアントのGetDataではある程度まとめて受信します。 (1)サーバ側で送信 Winsock.SendData "aaaaa" Winsock.SendData "bbbbb" Winsock.SendData "ccccc" Winsock.SendData "ddddd" (2)クライアントで受信 Winsock.GetData xyz (1)のように送信した場合、(2)のxyzは ・aaaaabbbbbcc ・cccddddd のように数回に分けて受信されます。 希望としましては、1データ送信に対して1データ受信が望ましいのですが。 実際のデータには全角はある為、このような希望となりました。 もしかして、不可能なのでしょうか。 わかる方、教えて下さい。
- 締切済み
- Visual Basic
- サーバ/クライアントプログラム
クライアント側で dos.writeInt( 20 );で 20を書き込み サーバ側は期待どうり表示されますが クライアント側で さっき書いた20を 読み込んでるはずなんですが int recv = dis.readInt(); System.out.println( "書き込みデータ " + recv ); の部分が無視されるんですが なぜさっき書いた20が 読み込めないんでしょうか? 解説をお願いします //サーバプログラム import java.net.*; import java.io.*; class a{ public static void main( String args[] ) { System.out.println( "Ready!" ); try { ServerSocket ss = new ServerSocket( 5000 ); while( true ) { Socket so = ss.accept(); InputStream i = so.getInputStream(); OutputStream os = so.getOutputStream(); DataInputStream dis = new DataInputStream( i ); DataOutputStream dos = new DataOutputStream( os); int recv = dis.readInt(); System.out.println( "受信データ " + recv ); dis.close(); dos.close(); i.close(); os.close(); } }catch ( Exception e ) { } } } //クライアントプログラム import java.net.*; import java.io.*; class b{ public static void main( String args[] ) { try { Socket so = new Socket( "localhost", 5000 ); InputStream i = so.getInputStream(); OutputStream os = so.getOutputStream(); DataInputStream dis = new DataInputStream( i ); DataOutputStream dos = new DataOutputStream( os ); dos.writeInt( 20 ); int recv = dis.readInt(); System.out.println( "書き込みデータ " + recv ); dis.close(); dos.close(); i.close(); os.close(); }catch( Exception e ) { } } }
- 締切済み
- Java
- VC++2008Expressでwin32appとwinsockの勉強
VC++2008Expressでwin32appとwinsockの勉強の為にネットワークゲームを作ろうと思ってます。 winsockについて色々調べているうちに、疑問がわいたので質問します。 実現したいのは、サーバーとクライアントが1:Nのネットワークゲームです。 プレイヤーはサーバーに接続し、部屋に入ります。 誰かが初めて部屋に入ったら、サーバー側で部屋を用意します。(複数の部屋が立つこともあります) サーバー側で用意された部屋は、タイマーのイベントで部屋の状況データが変ります。 また、部屋にいるプレイヤーがアクションを起こす度に、サーバーの状況データが変ります。 その状況データを部屋に居る1人以上のプレイヤーで参照し共有します。 またプレイヤーデータはサーバー側で全部を一括管理します。 このような、プログラムを作りたいと思ってるんですが、 例えばサーバー側でwinsockは待ちうけ(accept)の所でプログラムは止まってしまいますよね。 クライアント側では受信(recv)の所で止まりますよね。 サーバー側やクライアント側で通信を待ち受けながら、 タイマーやマウスクリックに対するイベント処理を同時に行うことは可能なんでしょうか。 出来るとしたら、どのような仕組みにする必要があるでしょうか。 よろしくお願いします。m(_ _)m
- ベストアンサー
- C・C++・C#
- [winsock]多分レベル低い質問です
インターネット越しにマシン間でUDPのテストをすべく、 http://www.geekpage.jp/programming/winsock/udp.php の受信プログラムと送信プログラムをまるまるコピーして、その後送信プログラムをちょっといじりました。 まず setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(const char *)&TorF,sizeof(BOOL)); を追加し、 addr.sin_addr.S_un.S_addr = INADDR_BROADCAST; としました。 (TorF変数はBOOL型変数でTRUEで初期化してあります) そして送信プログラムと受信プログラムを別のマシン上に置いて、まず受信プログラムを起動して、送信プログラムを実行しましたが、受信側ではrecv関数待ちが続くだけで、いっこうにデータを受信できません。 備考: ローカルでテストを行ったところ、問題なく受信できました。 ブロードキャストでなく、直接IPを指定してマシン間で送受信をしても、やはりrecv関数でとまってしまいます。 そこで質問ですが、winsockを使用して別のPC間でUDP通信を行う場合、これ以外に設定が必要なのでしょうか。
- 締切済み
- C・C++・C#
- Java(クライアント)とC言語(サーバ)間のソケット通信 文字列送受信の不具合
サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。 ソースとしては以下の2つのソースをテストとして利用させて頂きました。 ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。 http://www.aihara.co.jp/~junt/program/socket/inet_server.c http://www.hellohiro.com/src/HelloWorldSocketClient.java クライアントのJavaプログラムから"Hello World"をサーバのCプログラムに送ると"Hello World"とは標準されるものの、出力された後ろに文字化けしたような文字が少し出てしまいました。加えて、直後にもう一度試してみようとサーバプログラムを立ち上げるとbindでエラーを吐いてしまいました。 recvの結果(rc)をprintfで確認してみたところ、13となり2文字多く送られていることを確認しました。 そこで、Javaのprintlnの自動改行周りが原因かと思いprintfに変えてた試してみました。 しかし、recvの結果は11となったものの文字化けと直後のbindエラーはなおりませんでした。(文字化けの種類が変わりましたが) この問題の原因と考えられることと解決案をアドバイス願えませんでしょうか。よろしくお願いします。 以下、開発環境です。 ■C言語 OS:Fedora 12 エディタ:一応VisualC++2008(Linux用に書いているので実質ただのテキストエディタ) コンパイラ:標準gcc ■Java OS:Windows XP SP3 エディタ・コンパイラ:eclipse ※実装先の都合上、winsockによるサーバに変えるや言語の変更はできません。
- ベストアンサー
- Java
- winsockについて
winsock、非同期モードでTCP/IP通信を行うようなプログラムを作成しています。 通常の同期モードでのプログラムは完成させることができました。 そこで、クライアント側を非同期モードにし、受信バッファにデータが入ったら受信するというようなプログラムにしたのですが、どうもうまく動作してくれません。 やはりサーバー側も非同期モードにしなければならないのですか?? どなたかご教授お願いします。
- 締切済み
- C・C++・C#
- WinSockを用いたコンソールアプリケーションでタイムアウトさせるには?
このたびC++でWinSockを用い、コンソールアプリケーションを製作しているのですが、たとえばacceptにしろ、recvにしろ、sendにしろ、そこでとまらずに素通りするか、またはタイムアウト時間を設定するようなことはできないのでしょうか… 何か分かることがあればよろしくお願いしますm(_ _)m
- ベストアンサー
- C・C++・C#